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.

2. JPQL

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 = cq.select(rootEntry);

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

First, we get a CriteriaBuilder which we use to create a typed Criteria**Query. 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.