JPA EntityManager createQuery() vs createNamedQuery() vs createNativeQuery()
Может кто-нибудь объяснить мне различия между следующими методами JPA EntityManager:
createQuery(), createNamedQuery() и createNativeQuery()
А также объясните мне, в каких случаях мы должны использовать этот метод?
Ответы
Ответ 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();
Для получения более подробной информации посетите эти ссылки:
Создание запросов с использованием языка запросов на сохранение Java
JPA зачем использовать createNamedQuery
Зачем нам нужен собственный запрос?
Ответ 3
CreateQuery
используется для создания JPQLqueries
createNamedQuery
используется для определения запросов с именем в файле сопоставления или аннотации, например: obj.createNamedQuery("entity.findbycode",Something.class)
createNativeQuery
используется для выполнения собственных/чистых SQL-запросов.