如何修复Hibernate中的“对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例”错误。

884

我使用Hibernate保存对象时遇到以下错误:

object references an unsaved transient instance - save the transient instance before flushing

2
这个错误出现在什么上下文中?是与瞬态变量有关还是没有? - vijay
1
如果您的对象之间存在关联关系,确保它们按正确顺序保存。例如:作者在书之前保存,因为作者是书的必要条件。同样地。 - Gayal Rupasinghe
33个回答

0

当我保存子对象时,我没有持久化父对象,导致了这个异常。为了解决这个问题,在同一个会话中,我持久化了子对象和父对象,并在父对象上使用了CascadeType.ALL。


0
在我的情况下,使用Cascade.ALL会向表中添加不必要的条目,该表已经具有相同的对象(生成没有id的子值就是这样)。 因此,我必须通过首先从存储库获取子对象并将其设置到主对象中来解决问题。
Student s = studentRepo.findByName(generatedObject.getStudent().getName())
generatedObject.student(s);   

0

我的问题与JUnit的@BeforeEach有关。即使我保存了相关实体(在我的情况下是@ManyToOne),我仍然得到相同的错误。

问题与我在父级中拥有的顺序有关。 如果我为该属性分配值,则问题得到解决。

例如, 如果我有一个可以有一些类别(一个或多个)的Question实体,并且Question实体具有一个序列:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "feedbackSeq")
@Id
private Long id;

我需要给question.setId(1L);赋值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接