5
Iは、(ジャワ/休止状態で)次のシナリオを持っている:挿入時に不要な選択を防止する方法はありますか?
- Iは、2つのエンティティ・クラスを持って:XおよびY Xは、カスケード接続されていないYに@ManyToOneの関連付けを有します。
- IはXとYの(アンマネージ)インスタンスYのX(管理対象外)のインスタンスを作成し、XのYへの参照を埋めます。満たされているyの唯一のフィールドは主キーです。
- エンティティyには、基になるデータベースには対応する行がすでに存在しますが、エンティティxは新しいものです。
- 私はエンティティxを存続させます。
このシナリオを実行すると、1つのクエリINSERT xが表示されます。しかし、どのような実際に起こることは、Hibernateは2つのクエリを実行することである:
- SELECT Y
- INSERT X
はさらに、私はまた、Xの持続した後、Yへの参照が実際にないことを確認しセッションにはYのインスタンスがありません。ですから、なぜyのSELECTはまったく実行されますか?この現象を防ぐ方法はありますか?
ニースは、魅力的な作品です!私の質問の他の部分の任意のアイデア:私のシナリオでは、なぜHibernateはyでSELECTを行うのですか? – Rubrick
私はそれについて考えましたが、特定の答えはありませんでした。私の推測は、インスタンスを手動で作成したからです.Hibernateは、データベースに実際に存在するかどうかをチェックする必要があるため、デタッチされたオブジェクト(hibernate永続コンテキストによって管理されていないオブジェクト)です。しかし、たとえそれが存在しないとしても、dbは外部キーの制限エラーをスローし、挿入が防止されたため、私はそれについてはわかりません。要するに、私は知らない:) – SelimOber