Hibernate分离实体传递给持久化

时间:2015-01-23 17:47:35

标签: java spring hibernate testing orm

我在我的某个集成测试中抛出了这个PersistanceObjectException。

自行运行时自行运行的测试,但不是测试套件的一部分。所以我将DirtiesContext添加到所有集成测试中,但是由于某种原因,这没有任何影响。

我确认当我试图坚持时,我试图坚持的实体不存在。但是,只有在先前的测试(在不同的类中)执行相同的持久性时才会发生错误。

如果这是一个实体从一个案例持续到下一个案例的情况,那么为什么DirtiesContext不能解决这个问题,而我检查实体是否已经存在将是真的。

持久化操作是一个简单的entityManager.persist(实体)。没有什么复杂或花哨的。

有什么想法吗?我真的很难过这个。

1 个答案:

答案 0 :(得分:1)

这取决于您如何设置集成测试数据库。 DirtyContext设置只会重新创建Spring应用程序上下文,因此除非您有一个Spring上下文生命周期内存数据库,否则在测试运行之间可能无法清理数据库。

在您的情况下,您提供的实体只是设置了ID。如果您不提供新创建的实体,则持久化操作将失败。

因此,确保实体id在传递给persist时为null。