我有一个包含List<EntityRevision>
的实体。该集合有一个@OrderColumn
。
我希望获得按其索引排序的实体的所有EntityRevisions
。
我可以使用以下查询执行此操作:
SELECT er
FROM Entity e JOIN e.revisions er
WHERE e.id = :entityId
ORDER BY index(er)
但我无法弄清楚如何使用CriteriaQuery
。
使用EclipseLink 2.3.2 / JPA 2.0.3 - Root<EntityRevision>
上没有index()
方法,我可以在orderBy中使用。
有什么想法吗?
答案 0 :(得分:0)
我还没有测试过,但有点像 criteriaQuery.orderBy(criteriaBuilder.asc(((ListJoin)root.get(“listMapping”))。index())); 如果您的listMapping是一个带有orderby列的列表,则应该有效。
答案 1 :(得分:0)
这对我有用:
final EntityManager m = ...
final CriteriaBuilder b = m.getCriteriaBuilder();
final CriteriaQuery<Child> q = b.createQuery( Child.class );
final Root<Parent> p = q.from( Parent.class );
final ListJoin<Parent, Child> j = p.join( Parent_.children );
final CriteriaQuery<Child> s = q.select( j );
s.where( b.equal( j.get( Child_.parent ), parent ) );
s.orderBy( b.asc( j.index() ) );
final TypedQuery<Child> t = m.createQuery( s );
final List<Child> children = t.getResultList();
Assert.assertEquals( parent.getChildren().size(), children.size() );
Assert.assertEquals( parent.getChildren(), children );