2013-12-09 52 views
4

我试图写一个RQL查询,这是否SQL相当于 '在(X,Y,Z)属性':ATG RQL查询像SQL

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

我不知道如果RQL虽然支持这个。在Oracle文档,还有的是如何做到这一点上的存储库项目的ID属性的示例:

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

但是当我尝试在这个例子中更改ID到我想要查询的财产,我得到一个RQL ParseException。

有谁知道这是可能的吗?

回答

2

这是可能通过QueryBuilder的API(见下面的例子)。我不确定为什么这不是通过普通的RQL可用的。

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

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

QueryExpression theValueExpression = 
    theQueryBuilder.createConstantQueryExpression(zipcodeArray); 

Query theQuery = 
    theQueryBuilder.createIncludesQuery(theValueExpression, thePropertyExpression); 
+0

为什么这会降低投票率?这看起来像它会工作... – rcgeorge23

+0

@ rcgeorge23可能是因为它没有正确格式。 – radimpe

+0

对不起,我是新手,这是我在stackoverflow中的第一个答案。 – Aromal

0

ATG Documentation的RQL语法包括ID IN因此更改ID他人财产将无法正常这样你ParseException解析特定的比较查询。

继续往下看语法文档,您会发现ComparisonOperator。其中特别感兴趣的是INCLUDES ANY

围绕其使用的一个例子(from the docs)

利益包括任何{ “自行车”, “游泳”}

这相当于:

(利益包括了 “自行车”)OR(兴趣INCLUDES“游泳”)

所以这可能工作,只要你搜索标量属性。

因此,你留下最后的选择,你可能试图避免这是创建一个大的OR条件,这是我通常会这样做的方式,因为你必须经历一个循环无论如何,建立你的IN声明。

+1

感谢您的回答,虽然我认为INCLUDES仅用于收藏。我查询的属性不是一个集合 - 我曾尝试使用INCLUDES,但是我得到了另一个语法错误。而且,我试图避免一个大的(property ='x'或property ='y'...)条款,但我认为这可能是唯一的选择。 – rcgeorge23

+0

为什么downvote? – radimpe

-1

从radimpe的答案是正确的,是直接从oracle文档。你可以为你的需求做一个INCLUDES ANY查询。它适用于字符串。例如。如果你是在亚历克斯或布赖恩名搜索用户可以在RQL写:

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

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

+0

该示例未显示在您提供的链接中。该页面上的所有示例都按集合进行操作。从页面顶部的段落“另一组查询可以应用于数组或标量值的集合 - 例如,类型为int []的属性或”字符串集合“。 INCLUDES不会执行您在示例中显示的内容。 – rcgeorge23

+0

哎呀抱歉,这是我的错。它真的不会以这种方式搜索..只有多值(我试过通过dyn管理)。另外我在RQL中没有找到任何这样做。如果你正在编程,你可能需要使用sqlpassthrough(参数化)。 – boyintello

+0

包括任何仅适用于列表或数组的属性 – Vihung