Палец вверх 1
Перевод
Перевод

JPA 2 CriteriaQuery порядок по индексу

У меня есть объект со 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.

Есть идеи?

jpa-2.0 eclipselink criteria-api
задан Brian Repko 29 февр. 2012 г., 4:02:33
источник

2 ответа

Решение 0
Перевод
Перевод

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

ответ дан Chris 5 мар. 2012 г., 23:20:41
источник
Палец вверх 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 );
ответ дан PA314159 28 июн. 2013 г., 0:14:34
источник