【发布时间】:2019-11-14 15:14:09
【问题描述】:
我有如下代码,但最后一个断言失败:
@Transactional
void foo()
{
Assert.assertNotNull(em.find(TrivialEntity.class, 1));
Assert.assertEquals(em.createQuery("DELETE TrivialEntity WHERE id=1").executeUpdate(), 1);
Assert.assertNull(em.find(TrivialEntity.class, 1)); // fails
}
但是,在运行此代码并检查数据库后,我看到实体已被删除。我猜第二个“find”语句只是从第一个“find”返回之前返回的结果。
我还在上面的第一条和第二条语句之后用“em.flush”尝试了上面的代码,结果没有改变。如下代码确实有效,但我不想使用“删除”:
@Transactional
void foo()
{
Assert.assertNotNull(em.find(TrivialEntity.class, 1));
em.remove(em.find(TrivialEntity.class, 1));
Assert.assertNull(em.find(TrivialEntity.class, 1)); // now it passes
}
【问题讨论】:
-
您是否尝试提交事务?使用 flush() 对数据的更改会反映在数据库中,但它仍在事务中。
-
@AlexisPavlidis 我使用的是“@Transactional”,所以当方法成功返回时事务被提交。我已确认在上述任一方法成功返回后,实体已从数据库中删除。
标签: java sql-server hibernate