gpt4 book ai didi

java - 给定 id 的多个实体的高效缓存感知获取

转载 作者:行者123 更新时间:2023-11-30 23:16:25 27 4
gpt4 key购买 nike

这是在 Hibernate 上运行的 JPA2。

我想检索相同实体类型的多个实例,给定它们的 ID。其中许多已经在持久性上下文和/或二级缓存中。

我尝试了几种方法,但似乎都有其缺点:

  • 当我使用 entityManager.find(id) 遍历 id 时,我对每个非缓存项都有一个查询,即查询太多。
  • 使用 SELECT e FROM MyEntity e WHERE e.id in (:ids) 形式的查询,缓存的条目将从数据库中重新加载。
  • 我可以使用 entityManager.getEntityManagerFactory().getCache().contains(id) 手动检查每个 ID 的缓存。这适用于二级缓存,但会在持久性上下文中但不在二级缓存中的条目上返回 false。

如果不在加载效率低下和加载过多之间做出选择,最好的方法是什么?

最佳答案

你应该*能够像这样从 session 缓存中推测性地拉出一个实体:

T obj = entityManager.getReference(entityClass, id);
boolean inSessionCache = entityManager.getEntityManagerFactory().isLoaded(obj);

我承认,这仍然会给您留下一个非常粗略的解决方案。

(*可能)

关于java - 给定 id 的多个实体的高效缓存感知获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17536174/

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