1

我有一个通过关联表映射的 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 关系?

谢谢 !

4

0 回答 0