Доступ по индексируемому элементу в JPQL - PullRequest
3 голосов
/ 28 мая 2010

Можно ли сделать доступ к индексированным элементам в JPQL, как в HQL :

select o from Order o where o.items[0].id = 1234

Я не смог найти что-то связанное в спецификациях JPA 2,

Я нацеливаюсь EclipseLink JPA здесь, так что если вы придумали решение EclipseLink, это тоже хорошо, хотя стандартное решение JPQL предпочтительнее.

Ответы [ 2 ]

4 голосов
/ 28 мая 2010

Функция INDEX должна добиться цели (на самом деле, я проверял это, и она делает):

SELECT o
FROM Order o JOIN o.items i
WHERE i.id = 1234
AND INDEX(i) = 0

Из спецификации JPA 2.0 ( 4.6.17.2.2 Арифметические функции ):

Функция INDEX возвращает целое число значение, соответствующее положению его аргумент в упорядоченном списке. Функция INDEX может быть применена только к идентификационные переменные, обозначающие типы, для которых столбец заказа имеет было указано.

0 голосов
/ 20 февраля 2015

Ответ @Pascal Thivent правильный. Чтобы заставить INDEX() работать, вам также необходимо добавить @OrderedColumn в поле сбора сущности.

Будьте осторожны, в Hibernate есть ошибка, из-за которой INDEX() не работает, как ожидается, он не поддерживает @OrderedColumn и mappedBy вместе: JPA 2.0 @OrderColumn аннотация в Hibernate 3.5

...