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