java joincolumn_java – 为什么JPA为JoinColumn选择String而不管...

使用EclipseLink JPA2实现(不确定它是否与Hibernate实现相同)

我有一个简单的结构,其中组织实体有合同.这是我从postgres导出的sql以创建组织

CREATE TABLE organization (

key bigint NOT NULL,

version integer

);

如果我像这样指定本组织的合同方:

@ManyToOne( optional=false )

@JoinColumn( name="organization_key", referencedColumnName="key" )

private Organization organization;

然后转储我得到的模式.

CREATE TABLE contract (

key bigint NOT NULL,

version integer,

organization_key character varying(255),

);

对我来说,使用字符变化(255)字段来引用组织密钥是没有意义的.我知道我可以使用columnDefinition如下:

@ManyToOne( optional=false )

@JoinColumn( name="organization_key", referencedColumnName="key", columnDefinition="bigint NOT NULL" )

private Organization organization;

获取bigint类型而不是字符类型.

期望它获得正确的列类型对我来说是不现实的吗?我使用它错了,还是我有错误的期望?我每次都必须使用columnDefinition吗?

更新:

这是组织实体的相关信息

@Entity

@Table( name = "organization" )

@SequenceGenerator( name = "ORGANIZATION_SEQ_GEN", sequenceName = "ORGANIZATION_SEQUENCE" )

public class Organization

implements DataObject

{

/**

* key for this instance. Should be managed by JPA provider.

*/

@Id

@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "ORGANIZATION_SEQ_GEN" )

private Long key;

/**

* JPA version column

*/

@Version

protected int version;

/**

* All contracts for this organization

*/

@OneToMany(mappedBy="organization" )

@OrderBy( "endDate DESC" )

private List contracts;

... getters and setters

}

这是契约实体

@Entity

@Table( name = "contract" )

@SequenceGenerator( name = "CONTRACT_SEQ_GEN", sequenceName = "CONTRACT_SEQUENCE" )

public class Contract

implements DataObject

{

/**

* key for this instance. Should be managed by JPA provider.

*/

@Id

@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "CONTRACT_SEQ_GEN" )

private Long key;

/**

* Organization that owns this contract, required.

*/

@ManyToOne( optional=false )

@JoinColumn( name="organization_key", referencedColumnName="key" )

private Organization organization;

/**

* JPA version column

*/

@Version

protected int version;

... getters and setters

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值