Chamar função do banco dentro do @Query do Spring

Olá pessoal, estou querendo fazer uma consulta no meu banco de dados PostgreSql e usar uma função que remove acentuação que já existe nele (remover_acentos) com o JPA.

As querys nativas pegam de boa a função, mas não estou sabendo fazer isso com a querys não nativas. Meu repositório está estendendo de JpaRepository<LancamentoConta, Long>.

@Query("select lc from LancamentoConta lc where lc.usuario.uuid = :uuid and (remover_acentos(UPPER(lc.historico)) LIKE CONCAT('%', remover_acentos(UPPER(:text)), '%') or CAST(lc.valor AS VARCHAR) LIKE CONCAT('%', replace(:text, ',', '.'), '%'))")
fun findByLancamentoComBusca(uuid: UUID, text: String, pageable: Pageable): Page<LancamentoConta>

Obrigado pela atenção :slight_smile:

Eu achei este artigo que diz que o JPA 2.1 introduziu uma forma de fazer o que vc quer usando function().

Vc faria algo assim:

function('remover_acentos', UPPER(lc.historico))

O problema é que eu não tenho como testar no momento.

Infelizmente não deu certo, ele não acha a função :frowning:

1 curtida

Usa SQL diretamente, hql/jpql é muito engessado.

Procura aqui por Native Queries:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

Exemplo:

@Query(value = “ESPARTA2.DESCOBRE_DOCMAGISTRADO(:codDoc);”, nativeQuery = true)
String DescobreDocumentoMagistrado(@Param(“codDoc”) int codDoc);

Referência: https://www.baeldung.com/spring-data-jpa-stored-procedures