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