Consulta que no distingue entre mayúsculas y minúsculas con Spring CrudRepository

102

Con Spring CrudRepository Query; Quiero seleccionar entidades "DeviceType" con su propiedad "name". Pero después de la consulta, seleccione los derechos de manera sensible a mayúsculas y minúsculas. Cómo lo hago de manera insensible a mayúsculas y minúsculas. Gracias.

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

    public Iterable<DeviceType> findByNameContaining(String name);

}  
Channa
fuente
16
Lo intentaste public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);?
Peter Keller
En caso de que esté interesado en Query, intente esto, no es necesario dar '%' después de LIKE <code> @Query (value = "seleccione dt de DeviceType como dt donde más bajo (dt.name) como más bajo (: nombre)" ) public Iterable <DeviceType> anyMethodNameGoesHere (@Param (name) String name); </code>
Java_Fire_Within el

Respuestas:

197

Exactamente como @Peter mencionó en el comentario, solo agregue IgnoreCase:

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

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

Consulte la documentación para obtener una lista de todas las palabras clave admitidas dentro de los nombres de los métodos.

Correcaminos
fuente
Muchas gracias por la respuesta; seguro que referiré esa documentación. Mayo Gracias. Pásalo bien !
Channa
3
Funcionó para mí. Estaba usando una consulta JPA. Entonces, según la documentación, donde UPPER (x.firstame) = UPPER (? 1) funcionó.
sunitha
@sunitha, ¿conoce alguna forma en la que podamos modificar este comportamiento, digamos, hacerlo más BAJO? Mi base de datos tiene indexación basada en minúsculas
Sudip Bhandari
@SudipBhandari: Claro que puedes.
sunitha
1
Para propiedades múltiples repita IgnoreCaseasí:List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
Tarator
11

La siguiente consulta de Spring Data Mongo funciona para mí. Preferiría usar en Listlugar deIterator

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

fuente
1

En mi caso, agregar IgnoreCaseno funcionó en absoluto.

Descubrí que también es posible proporcionar opciones para la expresión regular:

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

La iopción hace que la consulta no distinga entre mayúsculas y minúsculas.

rocksteady
fuente
1

Para aquellos que usan la palabra clave superior de consulta JPA personalizada y ayuda toUpperCase . El siguiente código funciona para mí

 return  entityManager.createQuery("select q from "table " q  where upper(q.applicant)=:applicant")
    .setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();
Dapper Dan
fuente
1
Tenga cuidado cuando use 'superior (q.applicant)'. En Postgres, causa '.PSQLException: ERROR: la función superior (bytea) no existe' cuando q.applicant es nulo
advortsov