【发布时间】:2011-04-29 16:35:26
【问题描述】:
使用 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<Long>
{
/**
* 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<Contract> contracts;
... getters and setters
}
这是合同实体
@Entity
@Table( name = "contract" )
@SequenceGenerator( name = "CONTRACT_SEQ_GEN", sequenceName = "CONTRACT_SEQUENCE" )
public class Contract
implements DataObject<Long>
{
/**
* 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
}
【问题讨论】:
标签: java postgresql jpa eclipselink jpa-2.0