JPA 2 CriteriaQuery порядок по индексу - PullRequest
1 голос
/ 29 февраля 2012

У меня есть сущность с 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()метод, который я могу использовать в порядке.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 28 июня 2013

Это сработало для меня:

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 );
0 голосов
/ 05 марта 2012

Я не проверял, но что-то вроде critQuery.orderBy (critBuilder.asc (((ListJoin) root.get ("listMapping")). index ())); должно работать, если ваш listMapping - это список со столбцом orderby.

...