Olá a todos,
Apenas um aviso sobre o uso do comando ILIKE no JPQL. Ele não é um recurso padrão do JPQL, então só funcionará em bancos de dados que o suportam nativamente. Bons exemplos são PostgreSQL e Snowflake, entre outros.
No entanto, alguns bancos de dados populares, como MySQL e SQL Server, não suportam o ILIKE. Isso significa que, se você estiver trabalhando com eles, suas consultas não serão executadas como esperado.
Portanto, é muito útil aprender a fazer correspondências semelhantes que ignoram maiúsculas e minúsculas de uma forma que funcione em todos os bancos de dados, independentemente do suporte a comandos específicos. Isso ajudará a garantir que seu código seja mais portátil e robusto.
Eu fiz o seguinte:
@Query("SELECT e FROM Serie s JOIN s.episodios e WHERE LOWER(e.titulo) LIKE CONCAT('%',LOWER(:trechoEpisodio),'%')")
List<Episodio> episodiosPorTecho(String trechoEpisodio);
Como o comando LIKE é case-sensitive precisamos usar o LOWER para poder comparar as duas strings, a parte do CONCAT é essencial pois primeiro colocando o trechoEpisodio em lower case e depois concatenamos com os caracteres curingas.
Outra alternativa seria tratarmos antes de chamar a funcão. Então ficaria algo como:
...
List<Episodio> episodiosEncontrados = repositorio.episodiosPorTecho(trechoEpisodio.toLowerCase());
...
@Query("SELECT e FROM Serie s JOIN s.episodios e WHERE LOWER(e.titulo) LIKE %:trechoEpisodio%")
List<Episodio> episodiosPorTecho(String trechoEpisodio);