Доступ к индексированным элементам в JPQL

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

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

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

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


person Timo Westkämper    schedule 27.05.2010    source источник


Ответы (2)


Функция ИНДЕКС должна сработать (на самом деле я ее протестировал, и она работает):

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 Арифметические функции):

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

person Pascal Thivent    schedule 27.05.2010

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

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

person cn123h    schedule 20.02.2015