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

Hibernate 无法检索缓存查询的新记录,hibernate,caching,jpa,ehcache,Hibernate,Caching,Jpa,Ehcache,在JPA(Hibernate实现)缓存方面经历了小小的挣扎之后,我终于能够缓存JPA查询了。当我更新数据库中的一些现有记录并使用executeAll()方法刷新缓存时,它也会刷新缓存。到目前为止,它工作得非常好 现在我尝试在数据库中添加新记录。但它并没有创造新的记录。当我试图分析日志时,我发现它只从数据库中一个接一个地提取所有现有记录 e、 g。 下面是我的代码。产品是我的实体类 final Query q = entityManager.createQuery("from Product");

在JPA(Hibernate实现)缓存方面经历了小小的挣扎之后,我终于能够缓存JPA查询了。当我更新数据库中的一些现有记录并使用executeAll()方法刷新缓存时,它也会刷新缓存。到目前为止,它工作得非常好

现在我尝试在数据库中添加新记录。但它并没有创造新的记录。当我试图分析日志时,我发现它只从数据库中一个接一个地提取所有现有记录

e、 g。 下面是我的代码。产品是我的实体类

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行。当我缓存时,它缓存了所有的主键P1、P2、P3、P4和P5。当我添加新记录和刷新/清除缓存时,它会对所有五个现有行激发五个查询以获得更新的值。但它不会启动原始查询来检索所有产品

我读了一些帖子,他们说我需要创建一个新的实体经理。但我正在使用spring在GenericDAO中注入entityManager。因此,我无法创建新的实体管理器

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


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

我找到了答案。下面的代码实现了这个技巧。但这是特定于hibernate的解决方案

((Session) entityManager.getDelegate()).getSessionFactory().getCache()
                .evictDefaultQueryRegion();
有人知道这方面的JPA特定代码吗