Spring CrudRepository findByInventoryIds (List inventoryIdList) – équivalent à la clause IN

Dans Spring CrudRepository, est-ce que nous avons un support pour “clause IN” pour un champ? c’est-à-dire quelque chose de similaire à ce qui suit?

findByInventoryIds(List inventoryIdList) 

Si un tel support n’est pas disponible, quelles options élégantes peuvent être envisagées? Les requêtes de tir pour chaque identifiant peuvent ne pas être optimales.

findByInventoryIdIn(List inventoryIdList) devrait faire l’affaire.

Le format du paramètre de requête HTTP serait ainsi:

 Yes ?id=1,2,3 No ?id=1&id=2&id=3 

La liste complète des mots-clés du référentiel JPA se trouve dans la liste de documentation actuelle . Il montre que IsIn est équivalent – si vous préférez le verbe pour la lisibilité – et que JPA prend également en charge NotIn et IsNotIn .

Pour toute méthode d’un Spring CrudRepository, vous devriez pouvoir spécifier le fichier @Query vous-même. Quelque chose comme ça devrait fonctionner:

 @Query( "select o from MyObject o where inventoryId in :ids" ) List findByInventoryIds(@Param("ids") List inventoryIdList); 

Oui, cela est pris en charge.

Consultez la documentation fournie ici pour les mots-clés pris en charge dans les noms de méthodes.

Vous pouvez simplement définir la méthode dans l’interface du référentiel sans utiliser l’annotation @Query et écrire votre requête personnalisée. Dans votre cas, ce serait comme suit:

 List findByIdIn(List ids); 

Je suppose que vous avez l’entité Inventory et l’interface InventoryRepository . Le code dans votre cas devrait ressembler à ceci:

L’entité

 @Entity public class Inventory implements Serializable { private static final long serialVersionUID = 1L; private Long id; // other fields // getters/setters } 

Le référentiel

 @Repository @Transactional public interface InventoryRepository extends PagingAndSortingRepository { List findByIdIn(List ids); }