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

我有三个实体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 

进行此获取的正确方法是什么?


不负相思意
浏览 74回答 1
1回答

沧海一幻觉

您更正此问题,为每个关系提供别名。SELECT person&nbsp;FROM&nbsp; person person&nbsp;LEFT JOIN FETCH person.country country&nbsp;LEFT JOIN FETCH country.translations这是一个框架的“限制”:当您使用链接获取时,您应该为每个关系指定一个别名!这种行为也可以解释,因为很难理解这些链接获取的真正含义:框架将获取每个关系还是只获取最后一个关系?告诉框架你想要什么获取关系更简单。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java