java – Hibernate:清除集合的二级缓存,同时级联删除项目

我有一个问题Hibernate不会为级联删除主题的项目集合更新二级缓存.

细节

假设我们有一个对象Parent,它包含Parent对象的Parent.myChildren集合.
现在我们还将人类与Humans.myAllHumans集合以及所有Parent和Child对象放在该集合中.
现在我们session.delete(父)和所有孩子都从数据库中删除了级联,但是Humans.myAllHumans集合的缓存没有更新!它仍然假设级联删除的对象在数据库中,并且我们在稍后尝试对集合进行迭代时遇到以下异常:
org.hibernate.ObjectNotFoundException:不存在具有给定标识符的行:[foo.Child#751]

尝试了方法

1)我已经尝试过SessionFactory.evictCollection()方法,但据我所知,它不是事务安全而且很难从二级缓存中删除数据,我不希望这样.

2)我也可以手动(以编程方式)从myAllHumans集合中删除每个对象.在这种情况下,hibernate会更新第二级缓存.这种方法我想避免,因为它只是使级联删除功能无用.

预期

我希望hibernate足够聪明,可以自动更新集合的缓存.可能吗?
我现在正在使用EhCache,您认为使用其他缓存实现或配置EhCache可能会有所帮助吗?

最佳答案
问题是Hibernate实际上并不执行删除操作.数据库将其作为外键关系的一部分,因此Hibernate永远不会看到可能被删除的所有对象,因此,无法更新在每种情况下都有效的缓存.

我认为最好的办法是在删除时刷新缓存(或部分缓存).

转载注明原文:java – Hibernate:清除集合的二级缓存,同时级联删除项目 - 代码日志