我有以下课程。
class A{
@OneToMany
List<B> bList;
}
class B{}
class C extends A{
@OneToMany
List<D> dList;
}
class D{}
我已经为每个@OneToMany关系使用了延迟加载。
我的要求是使用&#34; Join Fetch&#34;从C获取所有数据。因为我不想在访问B和D时触发任何其他数据库调用。 基本上我想要获取C,B和D加载&#34; EAGER&#34; 跟随之类的事情 &#34;从C c LEFT JOIN中选择DISTINCT c c.B&#34;
如果使用JPQL无法做到这一点,是否可以使用java条件API实现?
答案 0 :(得分:0)
是的,有可能,它应该是:
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();
以上代码需要根据您的要求进行调整。