3.9.11.7. 执行 JPQL 查询(GET)

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

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

rest-queries.xml 内容:

  1. <?xml version="1.0"?>
  2. <queries xmlns="http://schemas.haulmont.com/cuba/rest-queries.xsd">
  3. <query name="ordersAfterDate" entity="sales$Order" view="order-edit-view">
  4. <jpql><![CDATA[select o from sales$Order o where o.date >= :startDate and o.date <= :endDate]]></jpql>
  5. <params>
  6. <param name="startDate" type="java.util.Date"/>
  7. <param name="endDate" type="java.util.Date"/>
  8. </params>
  9. </query>
  10. </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 数组:

  1. [
  2. {
  3. "_entityName": "sales$Order",
  4. "_instanceName": "00002",
  5. "id": "b2ad3059-384c-3e03-b62d-b8c76621b4a8",
  6. "date": "2016-12-31",
  7. "description": "New Year party set",
  8. "number": "00002",
  9. "items": [
  10. {
  11. "_entityName": "sales$OrderItem",
  12. "_instanceName": "Jack Daniels",
  13. "id": "0c566c9d-7078-4567-a85b-c67a44f9d5fe",
  14. "price": 50.7,
  15. "name": "Jack Daniels"
  16. },
  17. {
  18. "_entityName": "sales$OrderItem",
  19. "_instanceName": "Hennessy X.O",
  20. "id": "c01be87b-3f91-7a86-50b5-30f2f0a49127",
  21. "price": 79.9,
  22. "name": "Hennessy X.O"
  23. }
  24. ],
  25. "customer": {
  26. "_entityName": "sales$Customer",
  27. "_instanceName": "Morgan Collins",
  28. "id": "5d111245-2ed0-abec-3bee-1a196da92e3e",
  29. "firstName": "Morgan",
  30. "lastName": "Collins"
  31. }
  32. }
  33. ]

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