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!