如何在hibernate中禁用脏检查

时间:2017-10-24 14:33:25

标签: hibernate jpa-2.0

我使用hibernate 5,我想知道如何禁用脏检查或从存储快照列表中手动删除元素? 我有

class A{
.... 
 @OneToMany
 private List<B> childs;
...
}

然后我使用JPQL从数据库中立即从子列表中删除了对象,然后从列表中手动删除该对象

a.getChilds().remove(b)

然后当我合并对象时给出一个异常

javax.persistence.EntityNotFoundException:Unable to find com.company.package.B with id 156983

调试后,我在storedSnapshot列表中找到了已删除的对象b。

1 个答案:

答案 0 :(得分:1)

我不清楚你想做什么。我会给你几个选择。

如果您不希望Hibernate更改数据库中的任何内容,除非您专门刷新它,那么您可以将FlushMode更改为手动。您可以使用以下配置执行此操作:

<property name="org.hibernate.flushMode" value="MANUAL"/>

如果您不希望提交对象中的更改,则可以简单地将其删除:

entityManager.detach(myObject);
阅读您的评论后

编辑

我认为您的问题更可能出在处理此缓存数据的策略上。我强烈建议您不要使用您可能不想保存的信息来更改对象。

使用像Hibernate这样的东西的一般想法是让一个Object代表数据库中的一行。

您可以做的是将此缓存信息存储在其他对象中,并且只有在您确定要在数据库中获取此信息时才更改A.