0

我正在使用 eclipse-link 2 并且有 3 个实体:Parent、Child 和 ChildInfo。Parent 对 Child 有 onetomany。Child 与 ChildInfo 有 1to1。

  1. 我想在一次调用中获得一个包含所有子对象的父对象“从父对象左侧选择 P 加入获取 P.children 其中 P.id =:id”这只会在 P 至少有 1 个孩子时给出结果(我认为这是一个左外连接)

  2. 我还想通过 1 个电话获得所有儿童和财物 childinfos,因为 jpa 不支持导航 p.children.childinfo,有什么方法可以实现吗?使用提示(QueryHints.FETCH,“P.children.info”)不是一个好的选择,因为如果我有超过 1000 个孩子,就会触发超过 1000 个 sql 查询来获取孩子的信息。我也不想给 Child.childinfo eager-fetch 选项,而只是在查询级别。

非常感谢

4

1 回答 1

0

第一个查询(一旦修复)肯定应该返回父级及其子级,即使它没有:

select p from Parent p left join fetch p.children where p.id = :id

要获取 childInfos,您需要为孩子分配一个别名:

select p from Parent p 
left join fetch p.children child
left join fetch child.childInfo
where p.id = :id

我对 EclipseLink 没有具体经验,但这样的查询在 Hibernate 中肯定有效,并且是,AFAIK,有效的 JPQL。所以它应该在 EclipseLink 中工作。

于 2012-05-18T08:04:36.663 回答