为了账号安全,请及时绑定邮箱和手机立即绑定

获取第三级关系时加入获取失败

获取第三级关系时加入获取失败

不负相思意 2022-05-21 16:57:09
我有三个实体Person:Country和CountryTranslation。 Person与一个有关,Country并Country有许多CountryTranslations。我希望我的查询同时获取Country以及CountryTranslations何时获取 aPerson以避免多个查询。带着我Country一起Person做:List<Person> persons = (List<Person>) entityManager                .createQuery("SELECT person from Person person " +                             "left join fetch person.country")                .getResultList()这工作正常,我在休眠时看到它很好地获取并且没有执行额外的查询来带来Country,但带来CountryTranslations它仍然执行额外的查询。然后我尝试了:List<Person> persons = (List<Person>) entityManager                .createQuery("SELECT person from Person person " +                             "left join fetch person.country " +                             "left join fetch person.country.translations")                .getResultList()我得到了错误:org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list 进行此获取的正确方法是什么?
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

您更正此问题,为每个关系提供别名。


SELECT person 

FROM  person person 

LEFT JOIN FETCH person.country country 

LEFT JOIN FETCH country.translations

这是一个框架的“限制”:当您使用链接获取时,您应该为每个关系指定一个别名!


这种行为也可以解释,因为很难理解这些链接获取的真正含义:框架将获取每个关系还是只获取最后一个关系?告诉框架你想要什么获取关系更简单。


查看完整回答
反对 回复 2022-05-21
  • 1 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信