Can anyone please explain me the differences between following methods of JPA\'s EntityManager: createQuery(), createNamedQuery() and createNativeQuery() And also explain me on
CreateQuery
is used to create an JPQLqueries
createNamedQuery
is used to define queries with name in mapping file or annotation, example: obj.createNamedQuery("entity.findbycode",Something.class)
createNativeQuery
is used to execute native/pure SQL queries.
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:
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?