Dans Spring CrudRepository, la "clause IN" est-elle prise en charge pour un champ? c'est-à-dire quelque chose de similaire à ce qui suit?
findByInventoryIds(List<Long> inventoryIdList)
Si un tel support n'est pas disponible, quelles options élégantes peuvent être envisagées? Les requêtes de déclenchement pour chaque identifiant peuvent ne pas être optimales.
findByInventoryIdIn(List<Long> inventoryIdList)
devrait faire l'affaire.
Le format du paramètre de requête HTTP ressemblerait à ceci:
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 le liste actuelle de la documentation . Cela 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 dans un Spring CrudRepository, vous devriez pouvoir spécifier vous-même le @Query. Quelque chose comme ça devrait marcher:
@Query( "select o from MyObject o where inventoryId in :ids" )
List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);
Oui, c'est supporté.
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<Inventory> findByIdIn(List<Long> 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<Inventory, Long> {
List<Inventory> findByIdIn(List<Long> ids);
}