エラーが発生しました: Hibernate "オブジェクトが保存されていない一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存してください"
を使用してオブジェクトを保存しようとしているときに、休止状態にすると、次のような問題が発生する可能性がありますエラー:
object references an unsaved transient instance - save the transient instance before flushing
問題の理解:
このエラーは、オブジェクトにエンティティである未保存の一時インスタンスのコレクションが含まれている状況を Hibernate が検出したことを示します。まだデータベースに保存されていないもの。未保存のコレクションを持つエンティティを保存しようとすると、Hibernate はそのコレクション内の一時インスタンスがすでに保存されているものと想定します。
解決策:
このエラーを解決するにはの場合、親エンティティを保存するときに一時インスタンスをカスケード (保存) するように Hibernate に指示する必要があります。これは、XML マッピングに cascade="all" 属性を追加するか、アノテーションの場合は cascade=CascadeType.ALL アノテーションを追加することで実現できます。
XML の例:
<class name="com.entity.Parent"> <collection name="children" cascade="all"> <many-to-one name="child" /> </collection> </class>
の例注釈:
@Entity public class Parent { @OneToMany(cascade = CascadeType.ALL) private List<Child> children; }
cascade="all" または cascade=CascadeType.ALL を指定すると、親エンティティを保存するときに、そのすべての子エンティティも自動的に保存する必要があることが Hibernate に通知されます。以前にデータベースに保存されていない場合でも。これにより、関係内のすべてのオブジェクトが適切に永続化されます。
この修正を実装すると、未保存の一時インスタンスのコレクションを含むオブジェクトを正常に保存でき、「オブジェクトが未保存の一時インスタンスを参照している - 前に一時インスタンスを保存する」という問題を回避できます。 Hibernate での「フラッシュ」エラー。
以上がHibernate の「オブジェクトは保存されていない一時インスタンスを参照しています」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。