Query senza distinzione tra maiuscole e minuscole con Spring CrudRepository


102

Con Spring CrudRepository Query; Voglio selezionare le entità "DeviceType" con la sua proprietà "name". Ma dopo la query selezionare i diritti in modo sensibile al maiuscolo / minuscolo. Come faccio a renderlo insensibile alle maiuscole. Grazie.

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

    public Iterable<DeviceType> findByNameContaining(String name);

}  

16
Hai provato public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);?
Peter Keller

Nel caso in cui sei interessato a Query, prova questo, non è necessario fornire '%' dopo LIKE <code> @Query (value = "seleziona dt da DeviceType come dt dove lower (dt.name) come lower (: name)" ) public Iterable <DeviceType> anyMethodNameGoesHere (@Param (name) String name); </code>
Java_Fire_Within

Risposte:


197

Esattamente come @Peter menzionato nel commento, aggiungi semplicemente IgnoreCase:

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

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

Consulta la documentazione per un elenco di tutte le parole chiave supportate all'interno dei nomi dei metodi.


Grazie mille per la risposta; certo farò riferimento a quella documentazione. Grazie. Divertiti !
Channa

3
Ha funzionato per me. Stavo usando la query JPA. Quindi, come da documentazione, dove UPPER (x.firstame) = UPPER (? 1) ha funzionato.
sunitha

@sunitha, conosci un modo in cui potremmo modificare questo comportamento, diciamo renderlo INFERIORE? Il mio database ha l'indicizzazione basata su
lettere

@SudipBhandari: Certo che puoi.
sunitha

1
Per più proprietà leggi in IgnoreCasequesto modo:List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
Tarator

11

La seguente query di dati Spring mongo funziona per me. Preferirei usare Listinvece diIterator

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

1

Nel mio caso l'aggiunta IgnoreCasenon ha funzionato affatto.

Ho scoperto che è possibile fornire opzioni anche per l'espressione regolare:

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

L' iopzione rende la query senza distinzione tra maiuscole e minuscole.


1

Per coloro che utilizzano la query JPA personalizzata, la parola chiave Upper e toUpperCase aiuta. Il codice seguente funziona per me

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

1
Fai attenzione quando usi 'upper (q.applicant)'. In Postgres causa '.PSQLException: ERROR: function upper (bytea) non esiste' quando q.applicant è null
advortsov
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.