Ste*_*olf 8 jpa openjpa fetch criteria-api jpa-2.0
我正在使用JPA2和它的Criteria API来从数据库中选择我的实体.实现是WebSphere Application Server上的OpenJPA.我的所有实体都使用Fetchtype = Lazy建模.
我从数据库中选择一个具有某些条件的实体,并希望一次从子表中加载所有嵌套数据.如果我有一个数据模型,其中表A将oneToMany连接到表B,我可以在条件查询中使用Fetch子句:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<A> cq = cb.createQuery(A.class);
Root<A> root = cq.from(A.class);
Fetch<A,B> fetch = root.fetch(A_.elementsOfB, JoinType.LEFT);
Run Code Online (Sandbox Code Playgroud)
这很好用.我得到一个元素A,它的所有元素都被正确填充.现在表B与表C具有oneToMany关系,我也想加载它们.所以我在我的查询中添加以下语句:
Fetch<B,C> fetch2 = fetch.fetch(B_.elementsOfC, JoinType.LEFT);
Run Code Online (Sandbox Code Playgroud)
但这不会做任何事情.
有人知道如何在一个查询中获取多级实体吗?
Mik*_*unu 10
它不适用于JPQL,也无法在CriteriaQueries中使用它.规范将获取的实体限制为直接从返回的实体引用的实体:
关于使用CriteriaQuery进行提取连接:
fetch方法引用的关联或属性必须从作为查询结果返回的实体或embeddable引用.
关于JPQL中的fetch join:
FETCH JOIN子句右侧引用的关联必须是从实体引用的关联或元素集合,或者作为查询结果返回的可嵌入集合.
OpenJPA文档中也说明了相同的限制.
| 归档时间: |
|
| 查看次数: |
8372 次 |
| 最近记录: |