我需要做这样的事情:
结构是:
X 包含 Y 的列表。 Y 包含或不包含 Z 的列表。
Xroot.fetch("Y", JoinType.INNER);
Xroot.fetch("Y.Z", JoinType.LEFT);
但在 JPA 中,最后一行不起作用。任何想法如何做到这一点?
您需要在孩子内部获取。
Fetch<X,Y> yFetch = xRoot.fetch("Y", JoinType.INNER);
yFetch.fetch("Z", JoinType.LEFT);
当然,你也可以流畅地打字
xRoot.fetch("Y", JoinType.INNER).fetch("Z", JoinType.LEFT);
请参阅http://docs.oracle.com/javaee/6/api/javax/persistence/criteria/Fetch.html。
因为 JPA 2.0 规范不需要支持多级提取,所以没有供应商独立的解决方案:
本规范的实现不需要支持多级获取连接。使用多级提取连接的应用程序将不可移植。
根据文档,Hibernate 至少在 HQL 查询中支持多级获取。使用 EclipseLink可以使用eclipselink.left-join-fetch查询提示。