Consulta que não diferencia maiúsculas de minúsculas com Spring CrudRepository

102

Com Spring CrudRepository Query; Quero selecionar entidades "DeviceType" com sua propriedade "name". Mas a seguinte consulta selecione os direitos de maneira sensível a maiúsculas e minúsculas. Como faço para não diferenciar maiúsculas de minúsculas. Obrigado.

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

    public Iterable<DeviceType> findByNameContaining(String name);

}  
Channa
fonte
16
Você tentou public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);?
Peter Keller
No caso de você estar interessado em Query, tente isto, não há necessidade de fornecer '%' após LIKE <code> @Query (value = "selecione dt em DeviceType como dt onde inferior (dt.name) como inferior (: nome)" ) public Iterable <DeviceType> anyMethodNameGoesHere (@Param (name) String name); </code>
Java_Fire_Within

Respostas:

197

Exatamente como @Peter mencionado no comentário, basta adicionar IgnoreCase:

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

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

Consulte a documentação para obter uma lista de todas as palavras-chave suportadas nos nomes dos métodos.

Roadrunner
fonte
Muito obrigado pela resposta; com certeza vou consultar essa documentação. Maio, obrigado. Tenha um ótimo tempo!
Channa,
3
Funcionou para mim Eu estava usando a consulta JPA. Portanto, de acordo com a documentação, onde UPPER (x.firstame) = UPPER (? 1) funcionou.
sunitha
@sunitha, você conhece alguma maneira de modificar esse comportamento, digamos torná-lo MAIS BAIXO? Meu banco de dados tem indexação baseada em minúsculas
Sudip Bhandari
@SudipBhandari: Claro que pode.
sunitha
1
Para várias propriedades, repita IgnoreCaseassim:List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
Tarator
11

A seguinte consulta mongo de dados do Spring funciona para mim. Eu preferiria usar em Listvez deIterator

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

fonte
1

No meu caso, adicionar IgnoreCasenão funcionou de todo.

Descobri que também é possível fornecer opções para a expressão regular:

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

A iopção torna a consulta insensível a maiúsculas e minúsculas.

rocksteady
fonte
1

Para quem usa a consulta JPA customizada, a palavra-chave Upper e toUpperCase ajuda. O código a seguir funciona para mim

 return  entityManager.createQuery("select q from "table " q  where upper(q.applicant)=:applicant")
    .setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();
Dapper Dan
fonte
1
Tenha cuidado ao usar 'superior (q.applicante)'. No Postgres, ele causa '.PSQLException: ERROR: function upper (bytea) does not exist' quando q.applicant é nulo
advortsov