Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Sugestão] JPQL incorreto

Por alguma razão o JPQL não produziu um efeito correto (como deveria acontecer). O console do navegador não reconheceu a função "random".

Por essa razão, o melhor código para essa situação é:

package domain.frases.repository;


import domain.frases.entity.Frases;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

public interface FrasesRepository extends JpaRepository<Frases,Long> {

    @Query("SELECT f FROM Frases f order by rand() limit 1")
    Frases buscarFraseAleatoria();
}

Usar o @Query("SELECT f FROM Frases f order by rand() limit 1") é a melhor saída nessa @Query.

2 respostas
solução!

Olá, Gustavo.

Tudo bem?

Parece que você encontrou uma alternativa para resolver o problema de buscar uma frase aleatória, que é ótimo!

Na aula, foi utilizada a função RANDOM do JPQL para buscar uma frase aleatória. No entanto, parece que você encontrou um problema com essa abordagem e decidiu usar a função RAND() do SQL.

Aqui está o código usado na aula:

@Query("SELECT f FROM Frase f order by function('RANDOM') LIMIT 1")
Frase buscaFraseAleatória();

E aqui está o código que você sugeriu:

@Query("SELECT f FROM Frases f order by rand() limit 1")
Frases buscarFraseAleatoria();

A principal diferença entre os dois é a função usada para gerar um número aleatório. No primeiro caso, foi utilizada a função RANDOM() do JPQL, enquanto no segundo caso, você usou a função RAND() do SQL.

A função RANDOM() é uma função do JPQL e não é suportada por todos os bancos de dados, enquanto a função RAND() é uma função do SQL e é suportada pela maioria dos bancos de dados.

Portanto, se você está usando um banco de dados que não suporta a função RANDOM(), a sua solução é uma ótima alternativa.

No entanto, vale lembrar que o JPQL é uma linguagem independente de banco de dados, o que significa que ele deve funcionar com qualquer banco de dados que suporte JPA. Portanto, ao usar funções específicas do SQL, como RAND(), você pode perder essa independência de banco de dados.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.

Realmente, você captou.

Como eu estava fazendo um curso com MySQL e Spring Boot aqui na Alura, a mudança pro outro curso sugeriu o PostgreSQL, que acredito eu que tenha essa função específica funcionando do JPQL. Outrora, mantive o MySQL (apesar de no novo curso usarem Postgre).

Obrigado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software