【发布时间】:2023-04-09 08:53:02
【问题描述】:
我有一对 Hibernate 实体 A 和 B,它们通过双向多对多关系相关,如 here 所述 - 即,每个实体都有一个引用其他类型集合的包实体,有一个包含每个实体的主键的链接表。
我也在使用 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();
集合 as 仍然包含对 a 的引用,即使数据库状态反映了关系已被删除的事实。使缓存失效后,Hibernate 会返回正确的结果。
hibernate 是否有任何机制来处理相关实体的缓存失效,或者我是否需要从两端删除关系?
我使用的是 Hibernate 3.2.6。
【问题讨论】: