4

我正在尝试编写一个与此 sql 等效的 RQL 查询:

select * from some_table t where t.property in (1, 2, 3, 4 ...)

我不确定 RQL 是否支持这一点。在 oracle 文档中,有一个如何在存储库项的 ID 属性上执行此操作的示例:

ID IN { "0002421", "0002219", "0003244" ... }

但是当我尝试将本示例中的 ID 更改为我想要查询的属性时,我得到一个 RQL ParseException。

有谁知道这是否可能?

4

3 回答 3

2

这可以通过 querybuilder api 实现(参见下面的示例)。我不确定为什么这不能通过普通的 RQL 获得。

QueryExpression thePropertyExpression =     
   theQueryBuilder.createPropertyQueryExpression("postalCode");

String [] zipcodeArray = {"22185", "22183"};

QueryExpression theValueExpression = 
    theQueryBuilder.createConstantQueryExpression(zipcodeArray);

Query theQuery = 
    theQueryBuilder.createIncludesQuery(theValueExpression, thePropertyExpression);
于 2014-08-27T11:48:43.623 回答
0

ATG 文档中,RQL 语法包含一个特定的比较查询,ID IN因此更改ID为另一个属性将无法正确解析,因此您的ParseException.

进一步查看 Grammar 文档,您会发现ComparisonOperator. 特别感兴趣的是INCLUDES ANY.

关于其使用的示例(来自文档)

兴趣包括任何{“骑自行车”、“游泳”}

这相当于:

(兴趣包括“骑自行车”)或(兴趣包括“游泳”)

因此,只要您正在搜索标量属性,这可能会起作用。

所以这给你留下了最后的选择,你可能试图避免创建一个大OR条件,这是我通常会这样做的方式,因为IN无论如何你都必须通过一个循环来构建你的语句.

于 2013-12-09T13:10:59.770 回答
-1

radimpe 的回答是正确的,直接来自 oracle 文档。您可以根据您的要求执行 INCLUDES ANY 查询。它适用于字符串。例如。如果您正在搜索姓名为 Alex 或 Brian 的用户,您可以使用 RQL 编写:

firstName INCLUDES ANY {"Alex","Brian"}

链接在这里: http ://docs.oracle.com/cd/E24152_01/Platform.10-1/ATGRepositoryGuide/html/s0305multivaluedpropertyqueries01.html

于 2013-12-20T12:41:29.940 回答