EclipseLink:How 以避免对嵌套左连接进行额外的 sql 查询

EclipseLink:How to avoid additional sql query for nested left join

我有以下实体:

@Entity
class A{
 @OneToMany
 private List<B> bs;
 ...
}

@Entity
class B{
 @OneToMany
 private List<C> cs;
 ...
}

@Entity
class C{
 ...
}

所以我做了以下查询:

SELECT a FROM A a LEFT JOIN FETCH a.bs b LEFT JOIN b.cs

此代码有效,唯一的问题是 A 和 B 在一个连接查询中从数据库中读取,但是对于读取 C(LEFT JOIN b.cs)单独的 sql 查询执行为只读C实体。如何在一个 sql 查询中读取 A、B、C。

JPA 不允许嵌套的获取连接,但您可以使用特定的 EclipseLink left-join-fetch query hint to tell it you want the b.cs relationship fetched. See this answer

编辑:

使用代码

Query query = em.createQuery("SELECT a FROM A a");
query.setHint("eclipselink.join-fetch", "a.bs.cs");

获取 a->bs 和 bs->cs 并加入同一查询。