修复 Hibernate“对象引用未保存的瞬态实例”错误
尝试时会发生 Hibernate 中的“对象引用未保存的瞬态实例”错误在未正确指定级联的情况下保存具有未保存的相关对象的对象
原因:
当实体的集合属性包含尚未保存到数据库的新实例时,会出现此错误。 Hibernate 尝试在父对象持久化时自动保存这些新实例,但如果未正确设置cascade 属性,则会失败。
解决方案:
解决此问题,您需要在集合映射上指定级联属性。这告诉 Hibernate 在保存父对象时自动保存相关对象。
如果使用 XML 映射,请将以下内容添加到集合映射中:
<set name="relatedObjects" inverse="true" cascade="all"> <key column="parent_id"/> <one-to-many class="RelatedObject" column="related_id"/> </set>
如果使用注释,请添加以下是您的集合属性:
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) private Set<RelatedObject> relatedObjects;
通过指定cascade=all,您指示Hibernate将相关对象与父对象一起保存在一个单笔交易。这可确保所有必要的对象都保存到数据库中,并避免“未保存瞬态实例”错误。
以上是如何修复 Hibernate 的'对象引用未保存的瞬态实例”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!