ATG RQL查询,如(x,y,z)中的SQL'属性'

时间:2013-12-09 10:22:46

标签: sql atg

我正在尝试编写一个与此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。

有人知道这是否可行?

3 个答案:

答案 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"}

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