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?

    Whilst this links may theoretically answer the question, it would be preferable to include the essential parts of the answer here, and provide the links for reference. Otherwise a comment would be enough. – Tobias Liefke Nov 19, 2015 at 21:40
  • 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.

  •