JPA's EntityManager createQuery() vs createNamedQuery() vs createNativeQuery()

前端 未结 3 1230
滥情空心
滥情空心 2021-02-01 03:36

Can anyone please explain me the differences between following methods of JPA\'s EntityManager: createQuery(), createNamedQuery() and createNativeQuery() And also explain me on

3条回答
  •  孤街浪徒
    2021-02-01 04:18

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

提交回复
热议问题