gpt4 book ai didi

java - Join fetch 在获取第三级关系时失败

转载 作者:行者123 更新时间:2023-11-30 10:07:23 26 4
gpt4 key购买 nike

我有三个实体:PersonCountryCountryTranslationPerson 与一个 Country 相关,而 Country 有多个 CountryTranslations

我希望我的查询在获取 Person 时同时获取 CountryCountryTranslations 以避免多次查询。

为了将 CountryPerson 一起显示,我这样做:

List<Person> persons = (List<Person>) entityManager
.createQuery("SELECT person from Person person " +
"left join fetch person.country")
.getResultList()

这工作正常,我在 hibernate 上看到它很好地获取并且没有执行额外的查询来引入 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 

执行此抓取的正确方法是什么?

提前致谢

最佳答案

您更正此问题,为每个关系指定一个别名。

SELECT person 
FROM person person
LEFT JOIN FETCH person.country country
LEFT JOIN FETCH country.translations

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

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

关于java - Join fetch 在获取第三级关系时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54328200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com