gpt4 book ai didi

java - Hibernate L2 缓存和多对多关系

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:26 26 4
gpt4 key购买 nike

我有一对 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 的引用,即使数据库状态反射(reflect)了关系已被删除的事实。使缓存失效后,Hibernate 将返回正确的结果。

hibernate 是否有任何机制来处理相关实体的缓存失效,或者我是否需要从两端删除关系?

我正在使用 Hibernate 3.2.6。

最佳答案

根据定义,您需要从两侧移除。这是有道理的从技术角度来看,基本上两个集合都被缓存了独立。

当然从实际的角度来看是无稽之谈许多人会被它绊倒。

关于java - Hibernate L2 缓存和多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/858700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com