这是在Hibernate上运行的JPA2。
我希望在给定ID的情况下检索同一实体类型的多个实例。其中许多已经存在于持久化上下文和/或二级缓存中。
我尝试了几种方法,但似乎都有它们的缺点:
entityManager.find(id)
迭代id时,我会为每个非缓存项找到一个查询,即查询太多。SELECT e FROM MyEntity e WHERE e.id in (:ids)
形式的查询,将从数据库重新加载缓存的条目。entityManager.getEntityManagerFactory().getCache().contains(id)
预先为每个ID手动检查缓存。这适用于二级缓存,但对于持久性上下文中的条目将返回false,但不会在二级缓存中返回。在没有选择加载效率低和加载过多的情况下,最好的方法是什么?
答案 0 :(得分:0)
您应该*能够推测性地将实体拉出会话缓存,如下所示:
T obj = entityManager.getReference(entityClass, id);
boolean inSessionCache = entityManager.getEntityManagerFactory().isLoaded(obj);
我承认,这仍然会给你一个非常重要的解决方案。
(*可能)