Comment faire une JPA requête avec JOINTURE EXTERNE GAUCHE
Sur la base de ces deux tables (et de leurs entités correspondantes) :
profiles(id, email, name)
items(id, profile_id, rank, price)
Profile(email, name)
Item(profile, rank, price)
J'ai la liste de tous les profils, commandé par le meilleur rang de leurs articles (c'est un "haut profil" liste en fait).
Voici la requête SQL comme vous pouvez l'exécuter dans PHPMyAdmin par exemple:
SELECT AVG(i.rank) AS rank, p.* FROM profiles AS p LEFT OUTER JOIN items AS i ON p.id = i.profile_id GROUP BY p.id ORDER BY rank DESC;
Je suis nouveau sur JPA, et je ne peux pas trouver quelques exemples à propos de faire une JOINTURE EXTERNE GAUCHE avec CriteriaBuilder (si c'est la bonne chose à faire).
Je serais vraiment reconnaissant si quelqu'un pouvait me mener vers le droit chemin (je ne suis pas demander à quelqu'un de me faire le travail, juste avoir de bons indices).
Merci beaucoup! 🙂
Qui implémentation JPA utilisez-vous? Aussi loin que je me souvienne, il y a quelques problèmes avec exprimant une telle requête via JPA 2.0 Critères de l'API en mode veille prolongée.
J'utilise Jouer! Cadre (playframework.org/documentation/1.1/jpa) mais je ne peux pas vous dire quelle version ils utilisent (si c'est pourquoi vous posez cette question :/)
J'utilise Jouer! Cadre (playframework.org/documentation/1.1/jpa) mais je ne peux pas vous dire quelle version ils utilisent (si c'est pourquoi vous posez cette question :/)
OriginalL'auteur Cyril N. | 2011-01-20
Vous devez vous connecter pour publier un commentaire.
Cette requête peut être exprimé en JPQL comme suit:
Notez que vous ne pouvez pas écrire arbitraire
JOIN
s en JPA, seulementJOIN
s sur des relations, par conséquent, vous avez besoin d'unRIGHT JOIN
ici, parce que votre relation est unidirectionnel et la source de la relation qui devrait être sur le côté gauche.Cette requête pourrait être traduit en JPA 2.0 API des Critères assez simple, cependant, la dernière fois que j'ai vérifié, il Hibernate mise en œuvre des Critères de l'API n'a pas le support des jointures (et Play Framework utilise Hibernate-dessous). Donc, je pense que vous devez utiliser une requête JPQL dans ce cas.
Cette requête EST exécutée à l'aide
EntityManager
. Concernant laCriteriaBuilder
- je le répète, ça ne marcherait pas.Ah, ok, donc. Merci pour votre aide 🙂
OriginalL'auteur axtavt