查询指定的联接抓取,但抓取的关联的所有者不在select列表中
我select了两个ID列,但得到错误指定:
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]
一些代码:
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";
如何解决这个错误,我做错了什么?
使用常规的join
而不是join fetch
(顺便说一下,默认情况下是inner
的):
String hql = " select ec.id as entityChangeId, r.id as revisionId from EntityChange as ec " + " join ec.revision as r " + ...
正如错误消息所示, join fetch
在这里没有意义,因为这是一个强制加载收集的性能提示。