web-dev-qa-db-fra.com

Référentiels de données Spring - Rechercher où le champ dans la liste

J'essaie d'utiliser le ressort PagingAndSortingRepository avec un find MyEntity where field in fieldValues requête comme suit:

@Repository
public interface MyEntity extends PagingAndSortingRepository<MyEntity, String> {

    List<MyEntity> findByMyField(Set<String> myField);

}

Mais sans succès.

Je m'attendais à ce que la fonction ci-dessus renvoie toutes les entités dont le champ correspond à l'une des valeurs de champ, mais elle ne renvoie que des résultats vides .

Même si cela semble être une capacité assez simple, je n'ai pu y trouver aucune référence dans docs .

Est-ce que/Comment cela pourrait-il être réalisé?

Merci.

12
Daniel

Cela devrait en effet être possible si vous recherchez un champ spécifique au sein de votre entité et que vous souhaitez renvoyer une liste de tous les champs correspondant à au moins une entrée d'une collection. La documentation ici indique que cela peut être réalisé en utilisant le mot clé In exemple: findByAgeIn(Collection<Age> ages) et est équivalent à … where x.age in ?1

De votre message, je ne suis pas sûr à 100% si c'est le cas d'utilisation que vous recherchez, mais essayez-le. Vous devrez rechercher sur un champ spécifique, alors remplacez "champ" par le champ sur lequel vous effectuez la recherche. Si vous effectuez une recherche sur plusieurs champs, il peut être possible de concaténer les résultats avec le mot clé Or et de spécifier plusieurs champs de cette façon.

@Repository
public interface MyEntity extends PagingAndSortingRepository<MyEntity, String> {

    List<MyEntity> findByFieldIn(Set<String> myField);

} 
18
James Tayler

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/

Le nom de votre méthode doit être findByMyFieldIn, vous devez donc ajouter un In à la fin pour obtenir une requête where ... in (..).

3
jvecsei