Подтвердить что ты не робот

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

Может кто-нибудь объяснить мне различия между следующими методами JPA EntityManager: createQuery(), createNamedQuery() и createNativeQuery() А также объясните мне, в каких случаях мы должны использовать этот метод?

4b9b3361

Ответ 1

  • CreateQuery: используется для создания JPQL
  • createNamedQuery: используется для определения запросов с именем в файле сопоставления или аннотации перейти к этому
  • createNativeQuery: используется для выполнения собственных/чистых SQL-запросов Пример

Ответ 2

  • Метод createQuery используется для создания динамических запросов, которые задаются непосредственно в бизнес-логике приложений. Пример:

    public List findWithName(String name) {
    return em.createQuery(
    "SELECT c FROM Customer c WHERE c.name LIKE :custName")
    .setParameter("custName", name)
    .setMaxResults(10)
    .getResultList();
    }
    
  • Метод createNamedQuery используется для создания статических запросов или запросов, определенных в метаданных, с помощью аннотации javax.persistence.NamedQuery. Элемент name @NamedQuery указывает имя запроса, который будет использоваться с методом createNamedQuery. Элементом запроса @NamedQuery является запрос:

    @NamedQuery(
    name="findAllCustomersWithName",
    query="SELECT c FROM Customer c WHERE c.name LIKE :custName"
    )
    

Вот пример createNamedQuery, который использует @NamedQuery:

    @PersistenceContext
    public EntityManager em;
    ...
    customers = em.createNamedQuery("findAllCustomersWithName")
    .setParameter("custName", "Smith")
    .getResultList();
  • Создать CreateNativeQuery Создать экземпляр запроса для выполнения собственного SQL. вот несколько причин выбора createNativeQuery:

    • Низкий уровень доступа, что означает, что вы можете оптимизировать и обрабатывать отображение самостоятельно; с SQL вы фактически обращаетесь к таблице базы данных, а с помощью JPQL вы получаете доступ к объектам сущности;
    • Возможно, вы не хотите изучать JPQL, если знаете SQL
    • У вас уже есть запросы, написанные на SQL, и у них нет ресурсов/времени для их переноса на JPQL

Для получения более подробной информации посетите эти ссылки:

Создание запросов с использованием языка запросов на сохранение Java

JPA зачем использовать createNamedQuery

Зачем нам нужен собственный запрос?

Ответ 3

CreateQuery используется для создания JPQLqueries

createNamedQuery используется для определения запросов с именем в файле сопоставления или аннотации, например: obj.createNamedQuery("entity.findbycode",Something.class)

createNativeQuery используется для выполнения собственных/чистых SQL-запросов.