无法检索缓存查询的新记录

Can not retrieve new records for cached query

在 JPA(Hibernate 实现)缓存中经过一番努力后,我终于能够缓存 JPA 查询。当我更新数据库中的一些现有记录并使用 evictAll() 方法刷新缓存时,它也会刷新缓存。到目前为止它工作得很好。

现在我尝试在数据库中添加新记录。但它不会选择 NEW 记录。当我尝试分析日志时,我发现它从数据库中一条一条地挑选了所有现有记录。

例如 下面是我的代码。产品是我的实体 class。

final Query q = entityManager.createQuery("from Product");
q.setHint("org.hibernate.cacheable", false);
q.getResultList();

刷新缓存的代码。

entityManager.getEntityManagerFactory().getCache().evictAll();

Product.java

@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
@Entity
public class Product {
    // Attributes
}

我的产品有 5 行 table。当我缓存时,它缓存了所有主键 P1、P2、P3、P4 和 P5。当我添加新记录和 refresh/clear 缓存时,它会为所有五个现有行触发五个查询以获取更新值。但它不会触发检索所有产品的原始查询。

我读了一些书 post,他们说我需要创建新的实体管理器。但是我使用 spring 在 GenericDAO 中注入 entityManager。所以我无法创建新的实体管理器。

注意:我通过一些数据库工具而不是我的应用程序向数据库中插入新记录。

我想在刷新缓存后检索新记录。请帮忙。

我找到了答案。下面的代码成功了。但它是hibernate的具体解决方案。

((Session) entityManager.getDelegate()).getSessionFactory().getCache()
                .evictDefaultQueryRegion();

有人知道 JPA 的具体代码吗?