Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What to use: JPQL or Criteria API? [closed]

My Java application is using JPA for object persistence. The business domain is very simple (just three classes are persistent, with 3-5 properties in each). Queries are simple as well. The question is which approach I should use: JPQL or Criteria API?

like image 905
yegor256 Avatar asked Oct 04 '10 19:10

yegor256


People also ask

Is Criteria API deprecated?

The Criteria API allows us to build up a criteria query object programmatically, where we can apply different kinds of filtration rules and logical conditions. Since Hibernate 5.2, the Hibernate Criteria API is deprecated, and new development is focused on the JPA Criteria API.

Which is better JPQL or HQL?

JPQL is the JPA standard entity query language while HQL extends JPQL and adds some Hibernate-specific features. JPQL and HQL are very expressive and resemble SQL. Unlike Criteria API, JPQL and HQL make it easy to predict the underlying SQL query that's generated by the JPA provider.

Which is faster JPQL or native query?

In some cases it can happen Hibernate/JPA does not generate the most efficient statements, so then native SQL can be faster - but with native SQL your application loses the portability from one database to another, so normally is better to tune the Hibernate/JPA Query mapping and the HQL statement to generate more ...

What is the use of criteria API?

The Criteria API is used to define queries for entities and their persistent state by creating query-defining objects. Criteria queries are written using Java programming language APIs, are typesafe, and are portable. Such queries work regardless of the underlying data store.


1 Answers

I'm pretty sure this has already been covered here on SO but I couldn't find the existing question. So, here is my point of view on the question:

  • I find JPQL queries easier to write/read.
  • I find the Criteria API nice for building dynamic queries.

Which is basically what you'll find in Hibernate: Criteria vs. HQL.

But there is one major difference between the JPA 2.0 Criteria API and the Hibernate's Criteria API that is worth mentioning: the JPA 2.0 Criteria API is a typesafe API and thus gives compile time checks, code completion, better refactoring support, etc. However, I don't find that the benefits outweighs the ease of use of JPQL.

To sum up, I would favor JPQL, except for dynamic queries (e.g. for multi criteria search features).

Related questions

  • Hibernate: Criteria vs. HQL
  • What are some of the real world example where JPA2 Criteria API is more preferable?

More resources

  • Hibernate Querying 102 : Criteria API
like image 117
Pascal Thivent Avatar answered Oct 18 '22 21:10

Pascal Thivent