3.9.1. 预定义 JPQL 查询配置
在 CUBA 应用程序中,预定义的 JPQL 查询语句需要写在特定的配置文件中,这些配置文件是由 web 或者 portal 模块的 cuba.rest.queriesConfig 应用程序属性来指定,比如在 web-app.properties
文件中:
cuba.rest.queriesConfig = +com/company/myapp/rest-queries.xml
rest-queries.xml
这个文件必须放在 web 或者 portal 模块的根目录(比如 com.company.myapp
)。文件内容格式是由 rest-queries.xsd shema 定义。示例:
<?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
XML 里面的 query
元素还可以使用 cacheable
属性来启用查询语句的缓存。
查询语句可以包含预定义的参数,这些参数使用当前用户的 id 和登录名:session$userId
和 session$userLogin
。不需要在 params
元素声明这两个参数(参考上面的例子)。