I'm selecting two id columns but get error specified:
org.hibernate.QueryException: **query specified join fetching, but the owner of the fetched association was not present in the select list**
[FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=r,role=null,tableName=REVISIONS,tableAlias=revision1_,origin=ENTITY_CHANGED_IN_REVISION entitychan0_,columns={entitychan0_.REV_ID ,className=ru.csbi.registry.domain.envers.Revision}}] [ select ec.id as entityChangeId, r.id as revisionId from ru.csbi.registry.domain.envers.EntityChange as ec inner join fetch ec.revision as r where ec.groupEntityId = :groupEntityId and ec.groupName = :groupName and r.timestamp < :entityDateFrom and r.timestamp > :entityDateTo and ( ec.revisionType in (0, 5, 1, 4, 2 ) and not ( ec.otherGroupEntityModified = false and ec.thisGroupEntityModified = true and ec.rowDataModified = false and ec.collectionOfNotGroupEntityModified = false ) ) group by ec.id, r.id having count(*) > :start order by r.id desc]
Some code:
String hql = " select ec.id as entityChangeId, r.id as revisionId from EntityChange as ec " +
" inner join fetch ec.revision as r " +
" where ec.groupEntityId = :groupEntityId" +
" and ec.groupName = :groupName " +
" and r.timestamp < :entityDateFrom " +
" and r.timestamp > :entityDateTo " +
" and ( " +
" ec.revisionType in (" +
RevisionType.ADD.getRepresentation() + ", " +
RevisionType.ONLY_DATA_PROPERTY_MOD.getRepresentation() + ", " +
RevisionType.BOTH_COLLECTION_AND_PROPERTY_MOD.getRepresentation() + ", " +
RevisionType.ONLY_COLLECTION_PROPERTY_MOD.getRepresentation() + ", " +
RevisionType.DEL.getRepresentation() +
" ) " +
" and not ( "+
"ec.otherGroupEntityModified = false and " +
"ec.thisGroupEntityModified = true and " +
"ec.rowDataModified = false and " +
"ec.collectionOfNotGroupEntityModified = false " +
" ) " +
" ) " +
" group by ec.id, r.id " +
" having count(*) > :start" +
" order by r.id desc";
How to fix the error and what am I doing wrong?
Use regular
join
instead ofjoin fetch
(by the way, it'sinner
by default):As error message tells you,
join fetch
doesn't make sense here, because it's a performance hint that forces eager loading of collection.As you need the join fetch, removing the fetch is won't meet your need.
What you should do instead is specify a count query together with it.
Assuming you are paginating the result, below is jpa query that takes id as param and will cause the problem you specified and the second query solves this by adding count query to it.
Note:
fk_field
is the attribute in tableA that has the one-to-many rln. The count query does not use join fetch.