Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA's EntityManager createQuery() vs createNamedQuery() vs createNativeQuery()

Tags:

jpa

Can anyone please explain me the differences between following methods of JPA's EntityManager:

  • createQuery()
  • createNamedQuery()
  • createNativeQuery()

And also explain to me in which cases we should use which method?

like image 477
Krish Avatar asked Nov 19 '15 08:11

Krish


People also ask

What is createNamedQuery?

The createNamedQuery method is used to create static queries, or queries that are defined in metadata by using the javax.persistence.NamedQuery annotation. The name element of @NamedQuery specifies the name of the query that will be used with the createNamedQuery method.

What is Createnativequery in JPA?

Imagine having a tool that can automatically detect JPA and Hibernate performance issues.

Which is better 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 ...


1 Answers

  • The createQuery method is used to create dynamic queries, which are queries defined directly within an application’s business logic. Example:

    public List findWithName(String name) { return em.createQuery( "SELECT c FROM Customer c WHERE c.name LIKE :custName") .setParameter("custName", name) .setMaxResults(10) .getResultList(); } 
  • The createNamedQuery method is used to create static queries, or queries that are defined in metadata by using the javax.persistence.NamedQuery annotation. The name element of @NamedQuery specifies the name of the query that will be used with the createNamedQuery method. The query element of @NamedQuery is the query:

    @NamedQuery( name="findAllCustomersWithName", query="SELECT c FROM Customer c WHERE c.name LIKE :custName" ) 

Here’s an example of createNamedQuery, which uses the @NamedQuery:

    @PersistenceContext     public EntityManager em;     ...     customers = em.createNamedQuery("findAllCustomersWithName")     .setParameter("custName", "Smith")     .getResultList(); 
  • The createNativeQuery Create an instance of Query for executing a native SQL statement. here are some reasons to choice createNativeQuery:

    • Low level access, which means that you can optimize and handle the mapping by yourself; with SQL you actually access the database table while with JPQL you access the entity objects;
    • Maybe you do not want to learn JPQL if you already know SQL
    • You already have the queries written in SQL, and do not have resources/time to port them to JPQL

For more details visit those links:

Creating Queries Using the Java Persistence Query Language

JPA why use createNamedQuery

Why do we need to create native query?

like image 94
Mourad BENKDOUR Avatar answered Sep 17 '22 09:09

Mourad BENKDOUR