我通过关联表映射了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 table1 =新表1(...);
表2 table2 =新表2(...);
table1.setTable2(表2); table2.setTable1(表1);dao.save(表1);
引发以下异常:
org.hibernate.TransientPropertyValueException:非null属性引用瞬态> value - 瞬态实例必须在当前操作之前保存。
我尝试先保存table2和其他解决方案,但没有任何效果。 我不知道如何解决这个鸡蛋问题...
当然,在创建这个OneToOne关系的新对象时,我总是会有一个瞬态属性,但我不关心在瞬态状态下检查...
为什么@NotNull注释正在检查此瞬态?有没有办法告诉他只检查可空性而不是短暂的?
如果没有,我该如何通过关联表建立严格的OneToOne关系?
谢谢!