web-dev-qa-db-fra.com

Requête insensible à la casse avec Spring CrudRepository

Avec Spring CrudRepository Query; Je veux sélectionner des entités "DeviceType" avec sa propriété "name". Mais la requête suivante sélectionne les droits de manière sensible à la casse. Comment je le fais de manière insensible à la casse. Merci.

public interface DeviceTypeRepository extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContaining(String name);

}  
72
Channa

Exactement comme @Peter mentionné dans le commentaire, ajoutez simplement IgnoreCase:

public interface DeviceTypeRepository 
    extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContainingIgnoreCase(String name);
}  

Voir documentation pour une liste de tous les mots clés pris en charge dans les noms de méthodes.

149
Roadrunner

La requête mongo de données Spring suivante fonctionne pour moi. Je préférerais utiliser List au lieu de Iterator

public interface DeviceTypeRepository extends CrudRepository<DeviceType,Integer>, JpaSpecificationExecutor<DeviceType> {
    List<DeviceType> findByNameIgnoreCase(String name);
} 
7
user5268786

Dans mon cas, ajouter IgnoreCase ne fonctionnait pas du tout.

J'ai constaté qu'il était possible de fournir des options pour l'expression régulière, ainsi:

@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);

L'option i rend la requête insensible à la casse.

1
rocksteady

Pour ceux qui utilisent une requête JPA personnalisée Upper mot clé et toUpperCase help. Le code suivant fonctionne pour moi 

 return  entityManager.createQuery("select q from "table " q  where upper(q.applicant)=:applicant")
    .setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();
0
Dan