Hibernate严格的OneToOne关系

时间:2013-11-12 21:15:04

标签: hibernate one-to-one strict

我通过关联表映射了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关系?

谢谢!

0 个答案:

没有答案