Partner – JPA Buddy – NPI (tag=JPA/Hibernate)
announcement - icon

The right tools can and will save a lot of time. As long as you are using Hibernate and IntelliJ IDEA you can boost your coding speed and quality with JPA Buddy. It will help in a lot of the day-to-day work:

  • Creating JPA entities that follow best practices for efficient mapping
  • Creating DTOs from entities and MapStruct mappers using convenient visual tools
  • Generating entities from the existing database or Swagger-generated POJOs
  • Visually composing methods for Spring Data JPA repositories
  • Generating differential SQL to update your schema in accordance with your changes in entities
  • Autogenerating Flyway migrations and Liquibase changelogs comparing entities with the database or two databases
  • … and a lot more

Simply put, you'll learn and use the best practices of Hibernate and surrounding technology and become a lot more!

Definitely visit the JPA Buddy site to see its features in action closer.

Course – LSD (cat=Persistence)

Get started with Spring Data JPA through the reference Learn Spring Data JPA course:


1. Overview

In this quick tutorial, we’ll look at how to get all data from a table with Hibernate using JPQL or the Criteria API.

JPQL provides us with a quicker and simpler implementation while using the Criteria API is more dynamic and robust.


JPQL provides a simple and straightforward way to get all entities from a table.

Let's see what it might look like to retrieve all students from a table using JPQL:

public List<Student> findAllStudentsWithJpql() {
    return session.createQuery("SELECT a FROM Student a", Student.class).getResultList();      

Our Hibernate session's createQuery() method receives a typed query string as the first argument and the entity's type as the second. We execute the query with a call to the getResultList() method which returns the results as a typed List.

Simplicity is the advantage of this approach. JPQL is very close to SQL, and is, therefore, easier to write and understand.

3. Criteria API

The Criteria API provides a dynamic approach for building JPA queries.

It allows us to build queries by instantiating Java objects that represent query elements. And it's a cleaner solution if queries are constructed from many optional fields because it eliminates a lot of string concatenations.

We just saw a select-all query using JPQL. Let's take a look at its equivalent using the Criteria API:

public List<Student> findAllStudentsWithCriteriaQuery() {
    CriteriaBuilder cb = session.getCriteriaBuilder();
    CriteriaQuery<Student> cq = cb.createQuery(Student.class);
    Root<Student> rootEntry = cq.from(Student.class);
    CriteriaQuery<Student> all =;

    TypedQuery<Student> allQuery = session.createQuery(all);
    return allQuery.getResultList();

First, we get a CriteriaBuilder which we use to create a typed CriteriaQuery. Later, we set the root entry for the query. And lastly, we execute it with a getResultList() method.

Now, this approach is similar to what we did earlier. But, it gives us complete access to the Java language to articulate greater nuance in formulating the query.

In addition to being similar, JPQL queries and JPA criteria-based queries are equivalently performant.

4. Conclusion

In this article, we demonstrated how to get all entities from a table using JPQL or Criteria API.

The complete source code for the example is available over on GitHub.

Course – LSD (cat=Persistence)

Get started with Spring Data JPA through the reference Learn Spring Data JPA course:

res – Persistence (eBook) (cat=Persistence)
Comments are closed on this article!