オブジェクトは保存されていない一時インスタンスを参照します-フラッシュする前に一時インスタンスを保存します



Object References An Unsaved Transient Instance Save Transient Instance Before Flushing



エラーメッセージ:

org.hibernate.TransientPropertyValueException:オブジェクトは保存されていない一時インスタンスを参照します-フラッシュする前に一時インスタンスを保存します:Entity1-> Entity2



Entity1とEntity2の関係:

@ManyToOne @JoinColumn(name = 'entity2_id') private Entity2 entity2

原因分析:
分析後、hibernateは、Entity1の情報を保存するときにEntity1に関連付けられたentity2オブジェクトが非永続状態にあることを検出し、保存時にエラーが報告されます。



ソリューション思考:
データストレージにHibernateを使用する場合、保存する必要のある永続オブジェクトAは他のデータテーブル永続オブジェクトBに関連付けられます。その場合、Hibernateのセッション管理下のオブジェクトBの状態は永続またはnullである必要があり、両方で問題が発生します。一時的な状態と管理されていない状態。したがって:

  1. 関連するオブジェクトBが不要な場合は、Bをnullに設定します。
  2. 関連するオブジェクトBがそれを必要とする場合は、queryメソッドを再度呼び出してオブジェクトBにクエリを実行し、Bを永続状態にしてから、Aオブジェクトを保存します。