1
resposta

Spring Data - Listar os registros a partir de palavra chave ignorando a acentuação

Fala pessoal! Tudo bem? Estou apanhando aqui pra fazer uma busca de modo que ignore a acentuação da palavra chave, ou seja, se eu digitar João ou Joao ele vai encontrar todos os cadastros do João.

Fiz várias buscas na internet, e não consegui nenhum resultado concreto :( O mais próximo que cheguei foi de ignorar letras maiúsculas ou minúsculas.

Sinto que estou perto, tentei usar %, underline no parâmetro , etc... mas nada.

Alguém aí pode dar um help?

1 resposta

Oi!

Para fazer consultas com Spring Data JPA e ignorar as palavras com acento, você pode utilizar a função lower() e a função translate() do SQL para remover os acentos das palavras antes de fazer a comparação. Aqui está um exemplo de como fazer isso usando uma interface repository:

@Query("SELECT u FROM User u WHERE translate(lower(u.name), 'áàâãäéèêëíìîïóòôõöúùûüç', 'aaaaaeeeeiiiiooooouuuuc') LIKE %?1%")
List<User> findBySearchTermIgnoringAccent(String searchTerm);

Nesse exemplo, assumimos que você possui uma entidade User com um campo name que deseja usar para fazer a pesquisa. A consulta findBySearchTermIgnoringAccent usará a função translate() para substituir os caracteres acentuados pelas versões sem acento, e então a função lower() para converter a string em minúsculas. O resultado será comparado com o searchTerm fornecido, usando o operador LIKE para encontrar correspondências parciais.

Certifique-se de substituir User pelo nome da sua entidade e name pelo nome do campo que você deseja pesquisar. Além disso, a lista de caracteres dentro da função translate() pode ser expandida para incluir outros caracteres acentuados que você deseja ignorar.

Com essa configuração, ao chamar userRepository.findBySearchTermIgnoringAccent("João"), por exemplo, a consulta retornará todos os usuários com nomes que contenham "João", "João", "joão", "JOAO", etc., ignorando os acentos.