我有一对Hibernate实体A和B,它们通过双向多对多关系相关联,如此处所述 - 即每个实体都具有引用另一类型实体集合的包,并且链接表包含每个实体的主键。
我还使用Hibernate L2缓存来缓存集合值,如下所示:
我还使用Hibernate L2缓存来缓存集合值,如下所示:
<bag name="xyz" table="XYZ" ...>
<cache usage="nonstrict-read-write"/>
</bag>
我发现的问题是,当我从一侧更新关系时,另一侧的缓存项目集合没有被更新。
例如:
A a = session.get(1L, A.class);
B b = a.getBs().get(0);
Long bId = b.getId();
a.getBs().remove(0) // delete the B from A
// ... flush and commit the transaction...
B b2 = session.get(bId, B.class);
Collection<A> as = b2.getAs();
即使数据库状态反映出关系已被删除,集合仍然包含对a的引用。在使缓存失效后,Hibernate将返回正确的结果。
Hibernate是否具有处理相关实体缓存失效的机制,还是我需要从两端删除关系?
我正在使用Hibernate 3.2.6。