java - EclipseLink:如何避免嵌套左连接的额外 sql 查询

标签 java jpa eclipselink

我有以下实体:

@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/

相关文章:

java - Android 错误膨胀类 <unknown>

java - java.lang.Class 的用途是什么以及它与静态方法同步有何关系?

java - 如何设计如附图所示的 float 按钮

java - Kettle在java函数中启动改变系统属性

java - 实体未编织。 Eclipselink 2.1 + 动态编织

java - 如何从 YouTube 视频接收/获取音频/视频数据?

java - 将具有多对多关系的实体与集合的任何元素相匹配

java - JPA 2.0 hibernate @OneToMany + @MapKeyJoinColumn

java - 如何在使用 JPA 持久化的同时将 PrimaryKey 的值(使用序列生成)分配给另一个变量?

java - 如何计算 Java 类在运行时的反汇编?