【发布时间】:2011-04-16 08:05:02
【问题描述】:
我在数据库和 java 对象中有一个 1:n 关系,它表示与休眠的关系。 父表的主键是用数据库序列生成的, 子对象使用父对象的主键作为外键。
我创建了一个新的父对象,包括一组新的子对象。 然后我尝试用 one single
持久化所有对象session.save(contract);
父对象的存储没有问题,但是一旦我添加子对象,我就会得到一个异常
...非空属性引用空值或瞬态值...
因为子对象中缺少 FK。
是否有一个映射告诉 hibernate 使用新生成的父对象的 PK 作为子对象中的 FK,还是我必须通过手动设置 FK 单独持久化子对象?
映射父对象: ...
@Id
@Column(name="ID", unique=true, nullable=false, precision=22, scale=0)
@SequenceGenerator(name="sequence_seq", sequenceName="SEQ_CONTRACT")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence_seq")
public long getId() {
return this.id;
}
...
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="contract")
public Set<ContractSearchtags> getContractSearchtagses() {
return this.contractSearchtagses;
}
...
子对象的映射
...
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="CONTRACT_ID", nullable=false)
public Contract getContract() {
return this.contract;
}
...
【问题讨论】:
标签: hibernate mapping foreign-keys sequence