【发布时间】:2017-07-01 06:26:30
【问题描述】:
当用于从二级缓存中获取数据时,查询提示在 Eclipse Link 2.3.2/2.6.1 中不起作用 使用提示,
@QueryHint(name = "javax.persistence.cache.retrieveMode", value = "USE"),
@QueryHint(name = "javax.persistence.cache.storeMode ", value = "USE")
尝试使用以下选项。
1. Added JPA Hints to Named query itself
@NamedQuery(
name = TestEntity.FIND_BY_CODE,
query = "select t from Test t where t.code = :code",
hints = {
@QueryHint(name = "javax.persistence.cache.retrieveMode", value = "USE"),
@QueryHint(name = "javax.persistence.cache.storeMode ", value = "USE") })
2. Adding hints to the Entity Manager Itself after injecting it
em.setProperty("javax.persistence.cache.retrieveMode", CacheRetrieveMode.USE);
em.setProperty("javax.persistence.cache.storeMode", CacheRetrieveMode.USE);
3. Added JPA hints at the time of Query execution
em.createNamedQuery(TestEntity.FIND_BY_CODE,
AlertCategoryType.class).setHint("javax.persistence.cache.retrieveMode", CacheRetrieveMode.USE)
.setHint("javax.persistence.cache.storeMode", CacheStoreMode.USE)
.setParameter("code", code).getSingleResult();
以上提示的使用均无效。然后我尝试调试我发现的三个不同选项, 设置这些提示后形成的数据库查询将提示作为下面的键/值对传递。
eclipselink.query.hints => {javax.persistence.cache.retrieveMode=USE, javax.persistence.cache.storeMode=USE}
即使我们设置了 JPA 提示,eclipselink.query.hints 也是关键所在。这是我们无法控制的事情。
但是当我通过 Eclipse Link 提供的提示如下时,它开始按预期工作,结果是从缓存中获取的,而不是从数据库中获取的。
eclipselink.query.hints => {eclipselink.query-results-cache.size=500, eclipselink.query-results-cache=true}
这意味着当我们使用 Eclipse Link 时,它只会根据我们在 Query 中看到的键[如上所示]识别 Eclipse Link 提供的提示。
请建议任何解决方法以使 JPA 提示正常工作
我使用的环境是
- Eclispe Link 2.3.2/2.6.1
- Runnin fin serve Glassfish 4.1[payara]
- Java8/JEE7
【问题讨论】:
标签: jpa eclipselink glassfish-4 second-level-cache