My entity has a named query which looks like this:
@NamedQuery(name = 'Person.find', query = 'select p from Organization p where p.name=:NAME')
In my code I want to set the query cache hint:
query.setHint('eclipselink.cache-usage', 'CheckCacheThenDatabase');
If I try to get whole result list:
List<Person> result = query.getResultList();
EclipseLink throws an exception:
Exception [EclipseLink-6124] (Eclipse Persistence Services - 1.0.1 (Build 20080905)): org.eclipse.persistence.exceptions.QueryException Exception Description: Required query of class org.eclipse.persistence.queries.ReadAllQuery, found class org.eclipse.persistence.queries.ReadObjectQuery
If I try to get only a single result, it works:
Person person = query.getSingleResult();
If I remove the query hint, then getResultList() works also.
I don’t understand the exception – isn’t it saying that it is specifically expecting getResultList()?? What am I doing wrong?
EclipseLink documentation says:
‘EclipseLink does not support the cache usage for native queries or queries that have complex result sets such as returning data or multiple objects.’
Also the documentation says:
‘CheckCacheThenDatabase – You can configure any read-object query to check the cache completely before you resort to accessing the database.’
So the behaviour seems to be ok, I just found the exception misleading.
EDIT: Try something like this in the entity definition, that should be enough: (Coded on the web page so there can be errors)