2017-05-21 6 views
0

J'essaye d'implémenter une méthode de requête de référentiel pour rechercher une adresse par son nom de maison. Je souhaite que cette requête de recherche soit insensible à la casse.Spring EL - Syntaxe pour LIKE insensible à la casse?

J'ai la méthode de recherche suivante définie dans le référentiel d'adresses. Mais cette recherche est sensible à la casse.

@Query(value = "select ad from #{#entityName} ad where ad.houseName LIKE :houseName%") 
    public Page<LocalAddress> findByHouseName(@Param("houseName") String houseName, Pageable page); 

Comment rendre cette requête insensible à la casse?

+0

double possible de [Comment puis-je effectuer des recherches (insensible à la casse) dans une colonne en utilisant LIKE générique?] (http://stackoverflow.com/questions/2876789/how-can-i-search-case-insensitive-in-a-column-using-like-wildcard) – jediz

+0

@DeltaCharlie Si ma réponse vous a aidé s'il vous plaît ne pas oublier de l'accepter) – Cepr0

Répondre

0

Eh bien, il s'agit plutôt d'un moteur de base de données. SpEL évalue uniquement l'expression et remplace l'espace réservé par une valeur. Voir la question How can I search (case-insensitive) in a column using LIKE wildcard?

+0

Donc, n'est-il pas possible de faire une recherche insensible à la casse en utilisant LIKE dans SpEL? Je ne veux pas que ma requête soit liée à un moteur de base de données spécifique –

+0

Il semble que vous essayiez d'utiliser le mauvais outil pour faire le travail. Comment voulez-vous que Spring mette en place la fonctionnalité? Je doute qu'il soit assez intelligent pour réécrire votre requête par magie (il faudrait que tous les fournisseurs de bases de données soient pris en charge). – jediz

+0

Je pense que je comprends votre point de vue. Étant donné que la syntaxe pour LIKE insensible à la casse est différente en fonction du moteur de base de données, il n'est pas possible de générer une requête dynamique à l'aide de SpEL droite? –

2

Pour mettre en œuvre votre tâche que vous n'avez pas besoin écrire manuellement une requête, il suffit d'utiliser une des données Spring magic:

Page<LocalAddress> findByHouseNameIgnoreCaseContaining(String partOfHouseName, Pageable page); 

Cette méthode utilisera l'opérateur insensible à la casse like et récupérer vos données indépendamment DB.


Néanmoins, vous pouvez spécifier explicitement dans la requête JPQL:

@Query("select a from LocalAddress a where upper(a.houseName) like concat('%', upper(?1), '%')") 
Page<LocalAddress> getByName(String partOfHouseName, Pageable page) 

Plus d'infos ici: JPQL Reference

+0

Je suis déjà au courant de cette méthode. J'essayais juste de mettre en place la même chose avec SpEL. Avec les requêtes findBy, les noms deviennent parfois trop longs, il doit donc y avoir une alternative. –

+0

@DeltaCharlie J'ai mis à jour ma réponse ... – Cepr0