Yur*_*dak 8 java caching hibernate cascade second-level-cache
我有一个问题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 永远看不到可能被删除的所有对象,因此无法更新在每种情况下都有效的缓存。
我认为最好的选择是在删除时刷新缓存(或其中的一部分)。
| 归档时间: |
|
| 查看次数: |
6854 次 |
| 最近记录: |