我使用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。
答案 0 :(得分:1)
我不清楚你想做什么。我会给你几个选择。
如果您不希望Hibernate更改数据库中的任何内容,除非您专门刷新它,那么您可以将FlushMode更改为手动。您可以使用以下配置执行此操作:
<property name="org.hibernate.flushMode" value="MANUAL"/>
如果您不希望提交对象中的更改,则可以简单地将其删除:
entityManager.detach(myObject);
阅读您的评论后编辑:
我认为您的问题更可能出在处理此缓存数据的策略上。我强烈建议您不要使用您可能不想保存的信息来更改对象。
使用像Hibernate这样的东西的一般想法是让一个Object代表数据库中的一行。
您可以做的是将此缓存信息存储在其他对象中,并且只有在您确定要在数据库中获取此信息时才更改A.