JPA Criteria API Interview Questions and Answers
Learn JPA Criteria API with interview questions covering CriteriaBuilder, CriteriaQuery, Root, Predicate, Sorting, Pagination, Joins, Dynamic Queries, Specifications, and production best practices.
JPA Criteria API Interview Questions and Answers
Introduction
The JPA Criteria API is a type-safe, object-oriented way to build dynamic database queries. Unlike JPQL, which is written as strings, Criteria API uses Java objects to construct queries, making them easier to refactor and less prone to runtime syntax errors.
Criteria API is widely used in enterprise applications where search filters are dynamic, such as employee search, product filtering, reporting dashboards, and banking applications.
Criteria API Architecture
flowchart LR
Application --> CriteriaBuilder
CriteriaBuilder --> CriteriaQuery
CriteriaQuery --> Hibernate
Hibernate --> SQL
SQL --> Database
Q1. What is the Criteria API?
Answer
Criteria API is a type-safe query builder introduced in JPA.
Instead of writing query strings, developers build queries using Java classes.
JPQL
SELECT c FROM Customer c WHERE c.city='Dallas'
Criteria API
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Customer> query =
cb.createQuery(Customer.class);
Root<Customer> customer =
query.from(Customer.class);
query.select(customer)
.where(cb.equal(customer.get("city"), "Dallas"));
Benefits
- Type-safe
- Dynamic queries
- Easy refactoring
- No string concatenation
- Compile-time validation
Q2. What are the main components of Criteria API?
The main building blocks are:
| Component | Purpose |
|---|---|
| CriteriaBuilder | Builds query expressions |
| CriteriaQuery | Represents SQL query |
| Root | Main entity |
| Predicate | WHERE condition |
| Order | Sorting |
| TypedQuery | Executes query |
Diagram
flowchart TD
CriteriaBuilder --> CriteriaQuery
CriteriaQuery --> Root
Root --> Predicate
Predicate --> TypedQuery
TypedQuery --> Database
Q3. What is CriteriaBuilder?
Answer
CriteriaBuilder is a factory used to create query objects and expressions.
Example
CriteriaBuilder cb =
entityManager.getCriteriaBuilder();
It creates
- Equality conditions
- Like conditions
- Greater than
- Less than
- Count
- Sum
- Average
- Order By
- Group By
Q4. How do you create a Criteria Query?
Example
CriteriaBuilder cb =
entityManager.getCriteriaBuilder();
CriteriaQuery<Customer> query =
cb.createQuery(Customer.class);
Root<Customer> root =
query.from(Customer.class);
query.select(root);
List<Customer> customers =
entityManager.createQuery(query)
.getResultList();
Equivalent JPQL
SELECT c FROM Customer c
Q5. How do WHERE conditions work?
Conditions are created using Predicate.
Example
CriteriaBuilder cb =
entityManager.getCriteriaBuilder();
CriteriaQuery<Customer> query =
cb.createQuery(Customer.class);
Root<Customer> customer =
query.from(Customer.class);
query.where(
cb.equal(
customer.get("city"),
"Dallas"
));
Generated SQL
SELECT *
FROM customers
WHERE city='Dallas'
Q6. How do you perform Sorting?
Ascending
query.orderBy(
cb.asc(root.get("name"))
);
Descending
query.orderBy(
cb.desc(root.get("salary"))
);
Generated SQL
ORDER BY salary DESC
Q7. How do JOINs work in Criteria API?
Example
Root<Order> order =
query.from(Order.class);
Join<Order,Customer> customer =
order.join("customer");
Diagram
flowchart LR
Order --> Customer
Equivalent JPQL
SELECT o
FROM Order o
JOIN o.customer
Q8. How do Dynamic Queries work?
Criteria API shines when search filters are optional.
Example
List<Predicate> predicates =
new ArrayList<>();
if(city != null){
predicates.add(
cb.equal(
root.get("city"),
city
));
}
if(age != null){
predicates.add(
cb.greaterThan(
root.get("age"),
age
));
}
query.where(
predicates.toArray(
new Predicate[0]
));
Benefits
- Flexible
- Dynamic search screens
- Enterprise filtering
Q9. How does Pagination work?
Example
TypedQuery<Customer> typedQuery =
entityManager.createQuery(query);
typedQuery.setFirstResult(0);
typedQuery.setMaxResults(20);
Benefits
- Faster
- Less memory
- Better scalability
Q10. What are Criteria API Best Practices?
Use Static Metamodel
Instead of
root.get("name")
Prefer
Customer_.name
Use Specifications
Spring Data JPA Specifications are built on Criteria API.
Example
Specification<Customer>
Keep Queries Modular
Separate predicates into reusable methods.
Prefer Criteria API for Dynamic Searches
Use JPQL for simple fixed queries.
Use Criteria API for search screens.
Banking Example
flowchart TD
Customer --> Account
Account --> Transaction
Transaction --> CriteriaApi["Criteria API"]
CriteriaApi["Criteria API"] --> SQL
Example filters
- Customer Name
- Account Number
- Date Range
- Status
- Branch
- Transaction Type
Criteria API builds queries dynamically based on selected filters.
Common Interview Questions
- What is Criteria API?
- JPQL vs Criteria API?
- What is CriteriaBuilder?
- What is Root?
- What is Predicate?
- How do joins work?
- How do you implement dynamic search?
- How does pagination work?
- What is Specification?
- Why is Criteria API type-safe?
Quick Revision
| Topic | Description |
|---|---|
| CriteriaBuilder | Factory for query creation |
| CriteriaQuery | Represents query |
| Root | Main entity |
| Predicate | WHERE condition |
| Join | Relationship join |
| Order | Sorting |
| TypedQuery | Executes query |
| Pagination | setFirstResult + setMaxResults |
| Specification | Dynamic query abstraction |
| Static Metamodel | Compile-time safety |
Criteria API Execution Flow
sequenceDiagram
Application->>CriteriaBuilder: Build Query
CriteriaBuilder->>CriteriaQuery: Create Query
CriteriaQuery->>Hibernate: Generate SQL
Hibernate->>Database: Execute SQL
Database-->>Hibernate: Result
Hibernate-->>Application: Entity Objects
Key Takeaways
- Criteria API provides a type-safe and object-oriented way to build JPA queries.
- It eliminates string-based query errors by using Java classes and methods.
- The core components are CriteriaBuilder, CriteriaQuery, Root, Predicate, and TypedQuery.
CriteriaBuildercreates query expressions such asequal,like,greaterThan, and aggregate functions.Predicateis used to build flexible WHERE conditions.- Criteria API is ideal for dynamic search screens with optional filters.
- It supports joins, sorting, grouping, pagination, and aggregate functions.
- Spring Data JPA Specifications are built on top of the Criteria API.
- Use JPQL for simple static queries and Criteria API for complex dynamic queries.
- Criteria API is a common enterprise solution for advanced filtering in Spring Boot and Hibernate applications.