我在数据库中有一个1:n的关系,用Hibernate表示关系的Java对象。 父表的主键是使用数据库序列生成的,子对象使用父对象的主键作为外键。
我创建了一个包含一组新子对象的新父对象。然后我尝试使用一个单一的操作将所有对象持久化。
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;
}
...