私は、JPA で問題が発生しているいくつかの異常なエンティティ関係を持つプロジェクトに取り組んでいます。関連するオブジェクトが 2 つあります。ユーザーともう一方の X を呼び出しましょう。ユーザーは、X に対して 1 対多 AND 2 つの 1 対 1 の関係を持ちます。基本的には次のようになります。
【利用者実体】
@OneToMany(mappedBy="user", cascade=CascadeType.ALL, orphanRemoval=true)
private List<X> xList;
@OneToOne
@JoinColumn(name = "active_x1_id")
private X activeX1;
@OneToOne
@JoinColumn(name = "active_x2_id")
private X activeX2;
[X実体]
@ManyToOne()
@JoinColumn(name="user_id")
private User user;
新しいユーザーを永続化するとき、1 つのトランザクションで 2 つの x エンティティ (activeX1 用と activeX2 用に 1 つ) も永続化したいと考えています。JPA はこの abit を奇妙に処理します。ログは次のようになります。
INSERT INTO X VALUES (...) // x1
INSERT INTO USERS VALUES (...)
INSERT INTO X() VALUES (...) // x2
UPDATE USERS SET ...
UPDATE X VALUES (...) // updates x1
これにより、データベースで NOT NULL 制約を使用できなくなります。これらの複数の関係を処理するより良い方法はありますか? または、JPA がオブジェクトを永続化する順序を制御する方法はありますか? JPAは、この操作で明示的に私に反対しようとしているようです。どんな助けでも大歓迎です。