JPQL 从多个表中获取数据

JPQL fetch data from multiple tables

我有以下 类。

class A{

    @OneToMany
    List<B> bList;
}

class B{}

class C extends A{

    @OneToMany
    List<D> dList;
}

class D{}

我对每个@OneToMany 关系都使用了延迟加载。

我的要求是使用 "Join Fetch" 从 C 获取所有数据,因为我不想在访问 B 和 D 时触发任何其他数据库调用。 基本上我想获取 C,加载 B 和 D "EAGER" 像下面这样的东西 "SELECT DISTINCT c FROM C c LEFT JOIN c.B"

如果 JPQL 无法做到这一点,是否可以使用 java 标准 API 来实现?

是的,有可能,应该是这样的:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<C> c = cq.from(C.class);
Join<C,B> b = c.join("b", JoinType.LEFT); //left outer join
b.on(
    //define criteria here
    )   
);
cq.select(b.<String>get("field names"));

List<String> results = em.createQuery(cq)
                         .getResultList();

以上代码需要根据您的要求进行调整。