首頁 >Java >java教程 >如何解決 Hibernate 的「物件引用未儲存的瞬態實例」錯誤?

如何解決 Hibernate 的「物件引用未儲存的瞬態實例」錯誤?

Linda Hamilton
Linda Hamilton原創
2024-12-13 01:56:10679瀏覽

How to Resolve Hibernate's

遇到錯誤: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn