3.9.11.7. 执行 JPQL 查询(GET)

在使用 REST API 执行查询之前,查询语句必须在配置文件中进行描述。需要在 web 模块的主包中创建 rest-queries.xml 文件(例如 com.company.sales)。然后,必须在 web 模块的应用程序属性文件(web-app.properties)中定义该文件。

cuba.rest.queriesConfig = +com/company/sales/rest-queries.xml

rest-queries.xml 内容:

<?xml version="1.0"?>
<queries xmlns="http://schemas.haulmont.com/cuba/rest-queries.xsd">
    <query name="ordersAfterDate" entity="sales$Order" view="order-edit-view">
        <jpql><![CDATA[select o from sales$Order o where o.date >= :startDate and o.date <= :endDate]]></jpql>
        <params>
            <param name="startDate" type="java.util.Date"/>
            <param name="endDate" type="java.util.Date"/>
        </params>
    </query>
</queries>

要执行 JPQL 查询,必须执行以下 GET 请求:

http://localhost:8080/app/rest/v2/queries/sales$Order/ordersAfterDate?startDate=2016-11-01&endDate=2017-11-01

请求 URL 部分:

  • sales$Order - 提取的实体名称。

  • ordersAfterDate - 配置文件中的查询名称。

  • startDateendDate - 带有具体值的请求参数。

必须将 OAuth 令牌放在带有 Bearer 类型的 Authorization 请求头中。

该方法返回提取的实体实例的 JSON 数组:

[
  {
    "_entityName": "sales$Order",
    "_instanceName": "00002",
    "id": "b2ad3059-384c-3e03-b62d-b8c76621b4a8",
    "date": "2016-12-31",
    "description": "New Year party set",
    "number": "00002",
    "items": [
      {
        "_entityName": "sales$OrderItem",
        "_instanceName": "Jack Daniels",
        "id": "0c566c9d-7078-4567-a85b-c67a44f9d5fe",
        "price": 50.7,
        "name": "Jack Daniels"
      },
      {
        "_entityName": "sales$OrderItem",
        "_instanceName": "Hennessy X.O",
        "id": "c01be87b-3f91-7a86-50b5-30f2f0a49127",
        "price": 79.9,
        "name": "Hennessy X.O"
      }
    ],
    "customer": {
      "_entityName": "sales$Customer",
      "_instanceName": "Morgan Collins",
      "id": "5d111245-2ed0-abec-3bee-1a196da92e3e",
      "firstName": "Morgan",
      "lastName": "Collins"
    }
  }
]

Swagger 文档 中提供了可能的请求参数的完整列表。