public List findWithName(String name) {
return em.createQuery(
"SELECT c FROM Customer c WHERE c.name LIKE :custName")
.setParameter("custName", name)
.setMaxResults(10)
.getResultList();
}
|
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
| Назад | Вперёд | Содержание |
Методы EntityManager.createQuery и EntityManager.createNamedQuery используются для обращения к хранилищу данных с помощью запросов Java Persistence.
Метод 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. Элемент query в @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();
Именованные параметры — это параметры запроса с префиксом двоеточия (:). Именованные параметры в запросе связываются с аргументом следующим образом:
javax.persistence.Query.setParameter(String name, Object value)
В следующем примере аргумент name бизнес-метода findWithName связывается с именованным параметром :custName запроса путём вызова Query.setParameter:
public List findWithName(String name) {
return em.createQuery(
"SELECT c FROM Customer c WHERE c.name LIKE :custName")
.setParameter("custName", name)
.getResultList();
}
Именованные параметры чувствительны к регистру и могут использоваться как динамическими, так и статическими запросами.
Можно использовать в запросах позиционные параметры вместо именованных. Позиционные параметры имеют префикс знака вопроса (?), за которым следует числовая позиция параметра в запросе. Метод Query.setParameter(int position, Object value) используется для установки значений параметров.
В следующем примере бизнес-метод findWithName переписывается для использования входных параметров:
public List findWithName(String name) {
return em.createQuery(
"SELECT c FROM Customer c WHERE c.name LIKE ?1")
.setParameter(1, name)
.getResultList();
}
Входные параметры нумеруются начиная с 1. Входные параметры чувствительны к регистру и могут использоваться как динамическими, так и статическими запросами.
| Назад | Вперёд | Содержание |
Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены.
Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)