我选择了两个 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";

如何修复错误以及我做错了什么?

#1楼 票数:123 已采纳

使用常规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在这里没有意义,因为它是强制急切加载集合的性能提示。

#2楼 票数:31

由于您需要 join fetch,因此删除 fetch 将无法满足您的需求。

您应该做的是与其一起指定计数查询。

假设您正在对结果进行分页,下面是 jpa 查询,它将 id 作为参数并会导致您指定的问题,第二个查询通过向其添加计数查询来解决此问题。

注意: fk_field是 tableA 中具有一对多 rln 的属性。 计数查询不使用连接提取。

@Query(value = "from TableA a LEFT JOIN FETCH a.fk_field where a.id = :id") 

@Query(value = "from TableA a LEFT JOIN FETCH a.fk_field where a.id = :id", 
  countQuery = " select  count(a) from TableA a left join a.fk_field where a.id = :id")

#3楼 票数:0

您必须将相关项目列放入选择子句中

select ec.id as entityChangeId, r.id as revisionId, **r.revision** from EntityChange as ec " +
        " inner join fetch ec.revision as r " +

  ask by Vyacheslav translate from so

未解决问题?本站智能推荐:

1回复

多个JQPL提取联接因Hibernate失败

使用Hibernate 3.6.7和JPA 2,我在一个查询中不能有两个获取联接。 实体具有称为父对象的自引用字段。 localizedTexts是Java类型的Map的@ElementCollection 。 Entity.getParent()具有一个带有EAGER加载策略的@Many
1回复

JPA Hibernate离开了连接获取生成多个查询

我有一个jpql查询,急切地获取多级关联,如下所示 这会生成多个查询,但我在第一个选择中获得所有必需的信息。 所有额外查询用于从第一查询查询不同IdentifierIds的SingerIdentifier表数据。 在这方面的任何帮助都非常感谢。
1回复

Hibernate嵌套的一对多关联

我有具有以下关联的类Polygon,LineString,Point: 多边形-LineString是一对多关系(例如,polygon.getLineStrings()) LineString-点是一对多关系(例如lineString.getPoints()) 我想检索
3回复

Hibernate获取连接 - >无法获取多个包

问题是我的实体中有两个袋子,我想在我的jsf前端显示(后面的Spring,所以没有延迟加载)。 所以我必须急切地获取它们以在这样的列表中显示信息: 第1点(标签1,标签2)(标签1 ...标签n) 第2点(标签3,标签4)(标签1 ...标签n) 将两个列表都置于渴望
1回复

Hibernate中的@Fetch(FetchMode.JOIN)违反了FetchType.LAZY

我正在使用休眠> 5.2.10.Final,并使用FETCH JOIN急切地加载内部实体。 由于FetchType设置为Lazy,FetchMode设置为JOIN,因此在相关查询中,pwr会急切加载。 因此,我的问题是,如果我们将FetchMode用作JOIN,我们是否不应该
1回复

Grails为什么不建议连接提取无单端关联?

我在grails doc中看到了一些关于join fetch的内容: “这适用于单端关联,但你需要小心一对一。查询将按照你期望的那样工作,直到你想要的结果数量限制为止。你可能会得到比你预期的结果更少的结果。原因很简单,但最终问题出现在使用左外连接的GORM上。“ 我不明白为什么
1回复

加入fetch:“查询指定的连接提取,但获取的关联的所有者在选择列表中不存在”

我有以下代码: 它引发了一个例外: 结果我想得到的只是代码。
2回复

nhibernate集合集映射可避免通过提取连接进行n + 1个选择和重复行

我有一个对象表和对象别名表。 别名只是一组字符串集合: 如果我这样映射集合: 然后 从获取所有对象的基础存储库中,返回每个别名的重复项。 为什么? 如何摆脱列表中的重复对象? 谢谢大家的时间。 编辑:更新的映射...但是仅此而已。 别名没有自己的类