Aqui está um exemplo de como usar a JPQL no Spring JPA para listar os elementos na base de dados.

Suponha que temos a entidade Produto:

👨🏼‍💻 Exemplo prático

@Entity
public class Produto {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String nome;
    private float preco;

    // Construtores, getters e setters
}

E queremos escrever uma consulta JPQL personalizada para buscar todos os produtos com um preço superior a um determinado valor. Podemos fazer isso usando o JpaRepository do Spring JPA:

👨🏼‍💻 Exemplo prático

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface ProdutoRepository extends JpaRepository<Produto, Long> {
    List<Produto> findByPrecoGreaterThan(float preco);
}

Nesse exemplo, criamos uma interface ProdutoRepository que estende JpaRepository<Produto, Long>. Isso permite que aproveitemos as consultas automáticas fornecidas pela JpaRepository e também adicionemos nossas próprias consultas personalizadas.

A consulta personalizada findByPrecoGreaterThan() é definida no ProdutoRepository. O Spring Data JPA analisa o nome do método e cria automaticamente a consulta correspondente, sem a necessidade de escrever a consulta JPQL explicitamente. O método findByPrecoGreaterThan() retornará todos os produtos com preço maior que o valor especificado.

Através da herança da interface JpaRepository, você terá acesso a outros métodos úteis, como save(), findAll(), findById(), deleteById(), entre outros, que são fornecidos pela JpaRepository de forma automática.

Dessa forma, você pode simplificar a escrita de consultas personalizadas e aproveitar a funcionalidade de CRUD (criar, ler, atualizar e excluir) fornecida pelo JpaRepository do Spring Data JPA.