JPQL从多个表中提取数据
问题描述:
我有以下类。JPQL从多个表中提取数据
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 cB“
如果这对于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();
上面的代码需要调整您的要求。