我有一个通过关联表映射的 Hibernate OneToOne 关系。:
@Entity
@Table(name="table1")
public class Table1 {
@Id @GeneratedValue
private int id;
@Column(name="colTable1", nullable=false)
private String colTable1;
@OneToOne(cascade=CascadeType.ALL)
@JoinTable(name="associationtable",
joinColumns = @JoinColumn(name="idTable1"),
inverseJoinColumns = @JoinColumn(name="idTable2")
)
@NotNull
private Table2 table2;
....
}
和
@Entity
@Table(name="table2")
public class Table2 {
@Id @GeneratedValue
private int id;
@Column(name="colTable2", nullable=false)
private String colTable2;
@OneToOne(cascade=CascadeType.ALL, mappedBy = "table2")
@NotNull
private Table1 table1;
...
}
我想有一个严格的 1<>1 关系,所以我添加了 @NotNull 注释。
但是,当我尝试通过这样做保存到数据库中时:
表 1 表 1 = 新表 1(...);
表 2 表 2 = 新表 2(...);
table1.setTable2(table2); table2.setTable1(table1);dao.save(table1);
引发以下异常:
org.hibernate.TransientPropertyValueException:非空属性引用瞬态 > 值 - 瞬态实例必须在当前操作之前保存。
我尝试先保存 table2 和其他解决方案,但没有任何效果。我不知道如何解决这个鸡蛋问题......
当然,在创建此 OneToOne 关系的新对象时,我将始终具有瞬态属性,但我不在乎检查瞬态状态...
为什么@NotNull 注释会检查这个瞬态?有没有办法告诉他只检查可空性而不是瞬态?
如果没有,我该如何通过关联表建立严格的 OneToOne 关系?
谢谢 !