我有以下实体:
@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告诉它你想要获取 b.cs 关系。请参阅this answer
编辑:
使用代码
Query query = em.createQuery("SELECT a FROM A a");
query.setHint("eclipselink.join-fetch", "a.bs.cs");
在同一个查询中获取并加入 a->bs 和 bs->cs。
关于java - EclipseLink:如何避免嵌套左连接的额外 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37596088/