Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
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:
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?
–
CreateQuery: Used to create an JPQL
createNamedQuery: Used to define queries with name in mapping file or annotation go to this
createNativeQuery: Used to execute native/pure SQL queries Example
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.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.