遇到错误: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中文网其他相关文章!