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. Входные параметры чувствительны к регистру и могут использоваться как динамическими, так и статическими запросами.
Назад | Вперёд | Содержание |