我正在尝试编写一个与此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。
有人知道这是否可行?
答案 0 :(得分:2)
这可以通过querybuilder api实现(参见下面的示例)。我不确定为什么通过普通的RQL无法实现这一点。
QueryExpression thePropertyExpression =
theQueryBuilder.createPropertyQueryExpression("postalCode");
String [] zipcodeArray = {"22185", "22183"};
QueryExpression theValueExpression =
theQueryBuilder.createConstantQueryExpression(zipcodeArray);
Query theQuery =
theQueryBuilder.createIncludesQuery(theValueExpression, thePropertyExpression);
答案 1 :(得分:0)
来自ATG Documentation RQL语法包含ID IN
的特定比较查询,因此将ID
更改为另一个属性将无法正确解析ParseException
。
进一步查看语法文档,您将找到ComparisonOperator
。特别感兴趣的是INCLUDES ANY
。
围绕其使用(from the docs)
的示例兴趣包括任何{“骑自行车”,“游泳”}
这相当于:
(兴趣包括“骑自行车”)或(利益包括“游泳”)
所以这可能有用,只要你在搜索标量属性。
所以这给你留下了最后的选项,你可能会试图避免这是创建一个大OR
条件,这是我通常会这样做的方式,因为你必须经历无论如何,建立你的IN
语句的循环。
答案 2 :(得分:-1)
来自radimpe的答案是正确的,并且直接来自oracle docs。您可以根据您的要求进行包含任何查询。它适用于字符串。对于前者如果您在Alex或Brian中搜索名字的用户,您可以使用RQL编写:
firstName INCLUDES ANY {"Alex","Brian"}