1

这是在 Hibernate 上运行的 JPA2。

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

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

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

这样做的最佳方法是什么,而不是在低效加载和加载过多之间进行选择?

4

1 回答 1

0

您应该* 能够推测性地将实体从会话缓存中拉出,如下所示:

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

我承认,这仍然给你留下了一个非常糟糕的解决方案。

(* 可能)

于 2013-07-10T08:45:29.803 回答