Sous-requête dans la clause where avec CriteriaQuery
Quelqu'un peut-il me donner quelques conseils sur la façon de mettre ce genre de sous-requête dans un CriteriaQuery
? (Je suis en utilisant JPA 2.0 - Hibernate 4.x)
SELECT a, b, c FROM tableA WHERE a = (SELECT d FROM tableB WHERE tableB.id = 3)
- la deuxième sélection aura toujours obtenir un résultat unique ou null.
OriginalL'auteur artaxerxe | 2013-05-24
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme l'exemple suivant pour créer une sous-requête:
Note le code n'a pas été testé en raison de l'absence d'une IDE à proximité.
Édité à la question. Si vous avez besoin d'autres informations, demandez-moi s'il vous plaît. Merci.
Qu'attendez-vous de la requête pour faire en cas de
null
cas?Retour
null
(il n'y a pas de valeur null poura
champ).Vous n'avez pas à écrire
Root tableB = sq.from(TableB.class)
au lieu deRoot tableB = cq.from(TableB.class)
[ligne 5,sq
au lieu decq
] ?OriginalL'auteur Menno
Vous pouvez utiliser
DetachedCriteria
à represend la sous-requête. Votre code devrait ressembler à quelque chose comme:getHibernateTemplate()
veux dire?Oui, JPA comliant. getHibernateTemplate() fonctionne comme un wrapper sur la session hibernate. Cela prend soin de l'ouverture/fermeture de session (tous les BolierPlate code) ainsi qu'il est thread-safe. Il expose également les méthodes de session et de critères de requête comme enregistrer, mettre à jour, etc.
Ok. Si je change le APP mise en place et je ne pense pas être en mesure d'exécuter ce code (tant que c'est spécifique à la mise en veille). Je voudrais avoir un APP en fonction de la solution. De toute façon, votre solution répond à mes besoins, je pense que lorsque vous appuyer sur Hibernate. Merci.
OriginalL'auteur Konstantin Yovkov