查询提示在用于从第二个数据获取数据时,在Eclipse Link 2.3.2/2.6.1中不起作用一级缓存 使用提示,当与Eclipse Link ORM一起使用时,javax.persistence.cache.retrieveMode和javax.persistence.cache.retrieveMode不能与NamedQuery一起使用ORM
@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}
哪里eclipselink.query.hints是关键,即使我们设置了JPA提示。这是我们无法控制改变这一点的事情。
但是,当我通过Eclipse Link提供的提示如下,它开始按预期工作,结果从缓存而不是从数据库中获取。
eclipselink.query.hints => {eclipselink.query-results-cache.size=500, eclipselink.query-results-cache=true}
这意味着,当我们使用Eclipse链接它只能识别的Eclipse链接根据键[如上所示]我们在查询看到提供提示。
请提出解决办法,以获得JPA提示工作
环境我使用的是
- Eclispe的链接2.3.2/2.6.1
- 飞奔鳍服务Glassfish的4.1 [似鲭水狼牙鱼]
- Java8/JEE7