use*_*073 1 jpa jpa-2.0 jboss7.x
我有一个应用程序在JBoss AS 7安装(Infinispan二级缓存提供程序)上使用二级缓存.
我们有一些更新的JPQL查询使缓存失效 - 我想知道如果我们在应用程序中包含一些本机SQL查询会产生什么影响.查询缓存是否会失效?
我还记得在Hibernate上使用sqlQuery.addSynchronizedQuerySpace("")指令来防止某些本机SQL查询的缓存失效.是否可以使用JPA进行此操作?
谢谢!
我今天在处理同样的问题时遇到了这个问题,所以我想我会在这里发布我的发现.
使用JPA本机UPDATE/INSERT/DELETE查询会导致Hibernate使整个第二级实体缓存无效.正如你在问题中提到的,Hibernate有一个解决方法,但似乎不可能做相当于Hibernate addSynchronizedQuerySpace()
,addSynchronizedEntityClass()
并addSynchronizedEntityName()
使用纯JPA.
然而,JPA允许您做的是unwrap
使用JPA Query
对象来访问JPA提供程序的API.如果您将Hibernate用作JPA提供程序,那么这将允许您使用Hibernate的addSynchronizedXxx
方法,如下所示:
Query query = entityManager.createNativeQuery("UPDATE user SET ...");
query.unwrap(org.hibernate.SQLQuery.class)
.addSynchronizedEntityClass(User.class);
Run Code Online (Sandbox Code Playgroud)
它不是一个理想的解决方案,但它可以有效地阻止整个二级缓存失效.
归档时间: |
|
查看次数: |
1726 次 |
最近记录: |