次のシナリオがあります(Java / Hibernateで):
- X と Y の 2 つのエンティティ クラスがあります。X には、カスケードされていない Y への @ManyToOne 関連付けがあります。
- X の (管理されていない) インスタンス x と Y の (管理されていない) インスタンス y を作成し、y への参照を x に入力します。埋められる y の唯一のフィールドは主キーです。
- エンティティ y は、基になるデータベースに対応する行が既にありますが、エンティティ x は新しいものです。
- エンティティ x を永続化します。
このシナリオを実行すると、INSERT x という 1 つのクエリが表示されることが予想されます。ただし、実際には、Hibernate が 2 つのクエリを実行します。
- yを選択
- ×を挿入
さらに、x の永続化の後、y への参照が実際には管理されず、セッションに Y のインスタンスがないことにも気付きました! では、なぜ y に対する SELECT が実行されるのでしょうか? この動作を防ぐ方法はありますか?