-
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?