2010-05-27 19 views
3

Est-il possible de faire un accès élément indexé dans JPQL comme dans HQL:Indexed accès élément JPQL

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

Je ne pouvais pas trouver quelque chose lié à l'Assemblée parlementaire paritaire 2 spécifications,

Je cible EclipseLink JPA ici, donc si vous arrivez avec une solution EclipseLink, c'est bien aussi, bien qu'une solution standard JPQL soit préférée.

Répondre

4

La fonction INDEX devrait faire l'affaire (en fait je l'ai testé et il DOE):

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

De la spécification JPA 2.0 (4.6.17.2.2 Fonctions arithmétiques):

La fonction INDEX renvoie une valeur entière correspondant à la position de son argument dans une liste ordonnée. La fonction INDEX ne peut être appliquée qu'aux variables d'identification indiquant les types pour lesquels une colonne de commande a été spécifiée .

+0

Thivent, merci. –

0

La réponse de @Pascal Thivent est correcte. Pour que INDEX() fonctionne, vous devez également ajouter un @OrderedColumn dans le champ de collecte de l'entité.

Attention, il y a un bogue dans Hibernate, ce qui rend INDEX() fonctionne pas comme attendre, il ne supporte pas @OrderedColumn et mappedBy ensemble: JPA 2.0 @OrderColumn annotation in Hibernate 3.5