2 votes

Comment puis-je utiliser des jointures multiples dans une requête de critères JPA2 ?

C'est une version édulcorée d'un vrai problème.

J'ai trois tables STUDENT ADDRESS CLASS

STUDENT ManyToOne ADDRESS STUDENT ManyToMany CLASS

J'ai besoin de réunir tous les élèves qui ont la même adresse et vont dans la même classe.

Sql serait simplement (j'écris ceci à la volée et je ne l'ai pas testé)

Select * from STUDENT s join ADDRESS a on s.addressId = a.addressId join CLASS c on c.classId = s.classId

Je suis nouveau sur Criteria et bien que j'aie pu l'utiliser de manière raisonnable jusqu'à présent, je suis totalement bloqué quant à la manière dont je dois procéder. J'ai regardé partout la documentation d'Oracle, de Jboss, etc. Même sur SO il y a beaucoup de questions dans le même ton mais quand vous les lisez c'est autre chose qui est demandé.

0voto

Templar Points 2164

En supposant que votre classe Student définit une collection qui est gérée par JPA, vous ne devriez pas avoir besoin de définir des jointures dans votre requête JPQL. Récupérez simplement l'objet Student et OpenJPA récupérera les adresses et les classes automatiquement.

0voto

smiron Points 72

Vous pouvez essayer ceci :

Root<STUDENT> from = criteriaQuery.from(STUDENT.class);
Join<STUDENT, ADDRESS> joinAddress = from.join(STUDENT_.address);
Join<STUDENT, CLASS> joinClass = from.join(STUDENT_.class);

Avant cela, vous devez générer les méta-classes à partir de vos entités.

javac -classpath "PATHTOLIBRARIES\openjpa-all-2.2.2.jar" -Aopenjpa.metamodel=true STUDENT.java ADDRESS.java CLASS.java

PS : si vous n'avez pas besoin de faire quoi que ce soit d'autre avec le résultat de 'from.join', vous pouvez simplement ignorer la valeur retournée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X