1対1のマッピングを持つ2つのエンティティプラグとソケットがあります。
現在、 plug は、プラグインされているソケットとの外部キー関係を持っています。
Hibernate は、1 対 1 の参加を保証するために、外部キーに一意の制約を生成します。
私は、10個のソケットに差し込まれている10個のプラグを持っています。
しばらくすると、配置の変更についてシステムに通知する更新が行われます。
シナリオは、socketA にプラグインされた plugA が SocketB にプラグインされ、SocketB にプラグインされた plugB が socketA にプラグインされるというものです。
更新を行うとき、hibernate は最初に plugA の外部キー列を SocketB に更新しようとしますが、その結果、一意の制約に違反します。これは、plugB と socketB の関係がまだ変更されていないためです。
関係をモデル化する最も正しい方法は何ですか?
更新全体が単一のトランザクションとして発生する必要があることに注意してください。
これがコードです
ソケット内
@OneToOne(mappedBy="socket")
public Plug getPlug()
{
return plug;
}
内部プラグ @OneToOne(optional=false) public Socket getSocket() { return socket; }