Maison >base de données >tutoriel mysql >La clause IN de JPQL peut-elle gérer directement les collections ?

La clause IN de JPQL peut-elle gérer directement les collections ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-28 19:06:11977parcourir

Can JPQL's IN Clause Handle Collections Directly?

Clause JPQL IN : déroulement de tableaux, de listes et d'autres collections

Dans Java Persistence Query Language (JPQL), la clause IN vous permet pour spécifier une liste de valeurs spécifiques à des fins de comparaison. Cependant, si vous devez comparer une collection de valeurs au lieu de les lister individuellement, vous vous demandez peut-être s'il existe un moyen de le faire dans JPQL.

Réponse :

Oui, dans JPA 2.0 et versions ultérieures, vous pouvez spécifier une collection dans la clause IN à dérouler selon ses valeurs individuelles. Pour ce faire :

  1. Définissez la requête JPQL : Créez une requête JPQL avec la clause IN et un paramètre nommé, par exemple :
String qlString = "select item from Item item where item.name IN :names";
  1. Créer une collection : Créez une collection Java (par exemple, une liste ou Set) contenant les valeurs que vous souhaitez vérifier.
  2. Définissez le paramètre : Utilisez la méthode setParameter() sur l'objet Query pour transmettre la collection comme valeur du paramètre nommé :
Query q = em.createQuery(qlString, Item.class);
List<String> names = Arrays.asList("foo", "bar");
q.setParameter("names", names);

Exemple :

L'exemple suivant dans EclipseLink récupère tous les objets Item dont les noms correspondent à "foo" ou "bar" :

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

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

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

assertNotNull(actual);
assertEquals(2, actual.size());

Remarque pour Hibernate :

Avant Hibernate 4, vous devez entourez le paramètre entre parenthèses dans la requête JPQL :

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

Cependant, il s'agit d'un Extension spécifique à Hibernate et ne fait pas partie de la syntaxe JPQL standard.

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