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 并加入同一查询。
我有以下实体:
@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 并加入同一查询。