2013-12-09 40 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