我有三个实体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
这是一个框架的“限制”:当您使用链接获取时,您应该为每个关系指定一个别名!
这种行为也可以解释,因为很难理解这些链接获取的真正含义:框架将获取每个关系还是只获取最后一个关系?告诉框架你想要什么获取关系更简单。
添加回答
举报
0/150
提交
取消