5.8.1. Настройка предопределенных JPQL запросов
В приложении на CUBA предопределенные JPQL запросы должны быть объявлены в файлах, определенных свойством приложения cuba.rest.queriesConfig. Свойство должно быть определено в модуле web или portal (например, в файле web-app.properties
):
cuba.rest.queriesConfig = +com/company/myapp/rest-queries.xml
Файл rest-queries.xml
должен находиться в главном пакете модуля web или portal (например, com.company.myapp
). Его содержимое определяется схемой rest-queries.xsd, например:
<?xml version="1.0"?>
<queries xmlns="http://schemas.haulmont.com/cuba/rest-queries.xsd">
<query name="carByVin" entity="sample$Car" view="carEdit">
<jpql><![CDATA[select c from sample$Car c where c.vin = :vin]]></jpql>
<params>
<param name="vin" type="java.lang.String"/>
</params>
</query>
<query name="allColours" entity="sample$Colour" view="_local">
<jpql><![CDATA[select u from sample$Colour u order by u.name]]></jpql>
</query>
<query name="carsByIds" entity="sample$Car" view="carEdit" cacheable="true">
<jpql><![CDATA[select c from sample$Car c where c.id in :ids]]></jpql>
<params>
<param name="ids" type="java.util.UUID[]"/>
</params>
</query>
<query name="myOrders" entity="sample$Order" view="orderBrowse">
<jpql><![CDATA[select o from sample$Order o where o.createdBy = :session$userLogin]]></jpql>
</query>
</queries>
Пример конфигурирования и исполнения запроса можно увидеть в разделе Выполнение JPQL-запроса (GET) и Выполнение JPQL-запроса (POST).
Платформа также предоставляет встроенный запрос all
для получения списка всех экземпляров некоторой сущности. Он может быть использован совместно с /count
чтобы получить общее количество экземпляров сущности, например:
http://localhost:8080/app/rest/v2/queries/sales$Order/all/count
Атрибут cacheable
элемента query
включает кэширование данного запроса.
Запрос может содержать предопределенные параметры, которые принимают значения идентификатора и логина текущего пользователя: session$userId
и session$userLogin
. Их не нужно объявлять в элементе params
(см. пример выше).