遇到錯誤:Hibernate「物件引用未儲存的瞬態實例 -在刷新之前儲存瞬態實例」
嘗試使用以下指令儲存物件時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 中的“flushing”錯誤。
以上是如何解決 Hibernate 的「物件引用未儲存的瞬態實例」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!