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 アノテーションを追加しました。

しかし、これを実行してデータベースに保存しようとすると:

Table1 table1 = 新しい Table1(...);
Table2 table2 = 新しい Table2(...);
table1.setTable2(テーブル2); table2.setTable1(テーブル1);

dao.save(テーブル1);

次の例外が発生します。

org.hibernate.TransientPropertyValueException: 非 null プロパティが一時的な > 値を参照しています - 現在の操作の前に一時的なインスタンスを保存する必要があります。

最初にtable2と他のソリューションを保存しようとしましたが、何も機能しませんでした。この鶏が先か卵が先かという問題を解決する方法がわかりません...

もちろん、この OneToOne 関係の新しいオブジェクトを作成するときは、常に一時的なプロパティを持ちますが、一時的な状態でのチェックは気にしません...

@NotNull アノテーションがこの一時的なステータスをチェックしているのはなぜですか? 一時的ではなく null 可能性のみをチェックしていることを彼に伝える方法はありますか?

そうでない場合、関連付けテーブルを介して厳密な OneToOne 関係を確立するにはどうすればよいですか?

ありがとう !

4

0 に答える 0