Maison >base de données >tutoriel mysql >Comment puis-je utiliser efficacement la clause IN de JPQL avec les collections ?

Comment puis-je utiliser efficacement la clause IN de JPQL avec les collections ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-28 16:11:32729parcourir

How Can I Use JPQL's IN Clause with Collections Effectively?

Clause JPQL IN pour les collections

Lors de la récupération de données basées sur un ensemble de valeurs à l'aide d'une clause IN en SQL, il est pratique de transmettre un tableau ou une collection comme valeurs à vérifier. JPQL prend également en charge la clause IN, mais nécessite initialement que chaque paramètre soit spécifié individuellement (par exemple, "in (:in1, :in2, :in3)").

Solution pour JPA 2.0 et versions ultérieures

Dans JPA 2.0 et versions ultérieures, il est possible de passer une Collection en paramètre à la clause IN. Voici un exemple :

String qlString = "select item from Item item where item.name IN :names";
Query q = em.createQuery(qlString, Item.class);

List<String> names = Arrays.asList("foo", "bar");

q.setParameter("names", names);
List<Item> actual = q.getResultList();

Gestion des collections dans Hibernate 3.5.1 et versions antérieures

Pour Hibernate 3.5.1 et versions antérieures, il y a une légère bizarrerie lors de l'utilisation d'une collection paramètre dans la clause IN. La requête JPQL suivante est valide :

String qlString = "select item from Item item where item.name IN :names";

Cependant, Hibernate ne gère pas correctement cette syntaxe. Pour contourner ce problème, entourez le paramètre entre parenthèses :

String qlString = "select item from Item item where item.name IN (:names)";

Cette incohérence est suivie comme HHH-5126.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn