gpt4 book ai didi

hibernate - 自动查询缓存失效

转载 作者:行者123 更新时间:2023-12-02 22:17:52 25 4
gpt4 key购买 nike

我试图了解 hibernate 查询缓存的真正工作原理。我现在看到的是,当我将新实体插入数据库时​​,Hibernate 不会自动更新其二级缓存(尽管我只使用 Hibernate 调用)。我发现使其工作的唯一方法是在插入新实体后手动清理缓存。

这是更具体的例子。我有一个名为 Container 的持久实体,它可以包含许多项目。我想缓存所有项目:

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)class Item {  // rest of the code ...}class Container {  @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public List getItems() { ... } // rest of the code ...}

The problem which I have noticed is that when I:

1) read some Containers from the db into memory (together with the corresponding items)

   String hql =
"from Container c left join fetch c.items where c.type = 1";
List<Item> list = hibernateTemplate.find(hql);

2) 为选定的容器插入新项目

   hibernateTemplate.save(item)

3) 重复第一步
然后在第三步中我看不到我在第二步中插入的项目。仅当我在插入新项目后手动清理缓存时才能看到它们:

   sessionFactory.evictCollection("Container.items", updatedContainerId)

我的直觉告诉我 Hibernate 应该自动执行这样的缓存失效操作。有人看到它起作用了吗?我做错了什么还是只是不支持?

预先感谢您的回答。问候汤姆

最佳答案

您可能会发现我关于查询缓存工作原理的博客有助于理解查询缓存的作用以及它为何可能不像您想象的那样工作:

关于hibernate - 自动查询缓存失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/161427/

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