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);

}  

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.


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);
} 

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.


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();

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.