Jpa Eclipselink中的条件查询缓存缓存?

Jpa Eclipselink中的条件查询缓存缓存?,jpa,eclipselink,criteria-api,query-cache,Jpa,Eclipselink,Criteria Api,Query Cache,Iam使用EclipseLink作为JPA的条件查询。我需要根据查询结果的参数缓存它们。当我使用query.setHint(“eclipselink.query\u RESULTS\u CACHE”,“TRUE”)时,它仍然会向数据库发出查询。如何在条件查询的上下文中使用它 在这里,我设置了我的查询及其提示和addNamedQuery Query query = psEntityManager.getEntityManager().createQuery(criteriaQuery);// Cr

Iam使用EclipseLink作为JPA的条件查询。我需要根据查询结果的参数缓存它们。当我使用
query.setHint(“eclipselink.query\u RESULTS\u CACHE”,“TRUE”)
时,它仍然会向数据库发出查询。如何在条件查询的上下文中使用它

在这里,我设置了我的查询及其提示和addNamedQuery

Query query = psEntityManager.getEntityManager().createQuery(criteriaQuery);// Creating Query to supply Values
        query.setHint("eclipselink.QUERY_RESULTS_CACHE", "TRUE");
        query.setHint(QueryHints.QUERY_TYPE,QueryType.ReadObject);
        psEntityManager.getEntityManager().getEntityManagerFactory().addNamedQuery("query1", query);
以下是我的输出:

Query1-----------
[EL Fine]: sql: 2013-10-10 21:33:35.495--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, ADDRESSLINE1, ADDRESSLINE2, PHONENUMBER, fkCityId, fkPersonId FROM ADDRESS WHERE (fkPersonId = ?)
    bind => [2]
[EL Fine]: sql: 2013-10-10 21:33:35.527--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, CITYNAME, PINCODE, fkStateId FROM CITY WHERE (PRIMARYKEY = ?)
    bind => [2]
[EL Fine]: sql: 2013-10-10 21:33:35.528--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, STATENAME FROM STATE WHERE (PRIMARYKEY = ?)
    bind => [1]
[EL Fine]: sql: 2013-10-10 21:33:35.531--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, AGE, DOB, FIRSTNAME, LASTNAME, SEX, TIMESTAMP, fkDepartmentId FROM PERSON WHERE (PRIMARYKEY = ?)
    bind => [2]
[EL Fine]: sql: 2013-10-10 21:33:35.541--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, DEPTNAME FROM DEPARTMENT WHERE (PRIMARYKEY = ?)
    bind => [2]
[EL Fine]: sql: 2013-10-10 21:33:35.547--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, CITYNAME, PINCODE, fkStateId FROM CITY WHERE (PRIMARYKEY = ?)
    bind => [5]
[EL Fine]: sql: 2013-10-10 21:33:35.548--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, STATENAME FROM STATE WHERE (PRIMARYKEY = ?)
    bind => [3]
[EL Fine]: sql: 2013-10-10 21:33:35.551--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, CITYNAME, PINCODE, fkStateId FROM CITY WHERE (PRIMARYKEY = ?)
    bind => [8]
[EL Fine]: sql: 2013-10-10 21:33:35.553--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, STATENAME FROM STATE WHERE (PRIMARYKEY = ?)
    bind => [4]
Query2-----------
[EL Fine]: sql: 2013-10-10 21:33:35.557--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, ADDRESSLINE1, ADDRESSLINE2, PHONENUMBER, fkCityId, fkPersonId FROM ADDRESS WHERE (fkPersonId = ?)
    bind => [2]
Query3-----------
[EL Fine]: sql: 2013-10-10 21:33:35.56--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, ADDRESSLINE1, ADDRESSLINE2, PHONENUMBER, fkCityId, fkPersonId FROM ADDRESS WHERE (fkPersonId = ?)
    bind => [2]
Query4-----------
[EL Fine]: sql: 2013-10-10 21:33:35.563--ServerSession(14144548)--Connection(7200601)--SELECT PRIMARYKEY, ADDRESSLINE1, ADDRESSLINE2, PHONENUMBER, fkCityId, fkPersonId FROM ADDRESS WHERE (fkPersonId = ?)
    bind => [2]

删除query.setHint(QueryHints.query\u TYPE,QueryType.ReadObject),或者先调用它。查询类型会更改基础查询对象,并且可能不会将所有提示复制到新对象中。无论如何,这似乎是不必要的。

是否将此查询存储为命名查询?JPA2.1中的EMF提供addNamedQuery来存储命名查询dynamically@Chris否,此查询是查询条件query@Chris请发送链接以获取更多详细信息在同一行中多次在同一上下文中使用相同的参数执行相同的查询-是否每次都命中数据库?至于链接,请检查JPA 2.1规范。您可以创建查询并使用addNamedQuery将其添加到EMF中,以便可以使用createNamedQuery api查找和重用它。@Chris谢谢!!我没有,但没有工作,它仍然多次发出查询。请使用其他解决方案。移除后无效。每当我使用criteia创建查询时,我都会使用此代码块。您没有多次显示如何执行查询。我的意思是,对于每个查询,我都会使用criteria builder创建查询,然后使用上面的代码块,然后从中获取结果。这意味着您没有重用命名查询。创建一次查询,执行多次。em.createNamedQuery(“query1”)是!它正在一次又一次地创建查询并为其设置提示,收到了,非常感谢!!