ATG RQL-запрос, такой как SQL 'свойство в (x, y, z)'

Я пытаюсь написать запрос RQL, который делает эквивалент этого SQL:

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

Я не уверен, поддерживает ли RQL это все же. В документации Oracle есть пример того, как это сделать для свойства ID элемента репозитория:

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

но когда я пытаюсь изменить идентификатор в этом примере на свойство, по которому я хочу выполнить запрос, я получаю исключение RQL ParseException.

Кто-нибудь знает возможно ли это?

3 ответа

Решение

Это возможно с помощью API запросов (см. пример ниже). Я не уверен, почему это не доступно через простой RQL, хотя.

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

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

QueryExpression theValueExpression = 
    theQueryBuilder.createConstantQueryExpression(zipcodeArray);

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

Из документации ATG грамматика RQL включает в себя специальный запрос сравнения для ID IN так меняется ID в другой собственности не будет правильно разобрать, таким образом, ваш ParseException,

Посмотрев далее документ по грамматике, вы найдете ComparisonOperator, Особый интерес представляет INCLUDES ANY,

Пример вокруг его использования (из документов)

интересы включают в себя {"езда на велосипеде", "плавание" }

Это эквивалентно:

(интересы включают "плавание") ИЛИ (интересы включают "плавание")

Так что это может работать, пока вы ищете скалярные свойства.

Так что у вас остается последний вариант, которого вы, вероятно, пытаетесь избежать, который заключается в создании большого OR условие, как я обычно это делаю, так как вам придется пройти через цикл, чтобы создать свой IN заявление в любом случае.

Ответ от Radimpe правильный и прямой из документов оракула. Вы можете сделать ЛЮБОЙ запрос по вашему требованию. Это работает для строк. Например если вы ищете пользователей с именем в Алекс или Брайан, вы можете написать на RQL:

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

Ссылка здесь: http://docs.oracle.com/cd/E24152_01/Platform.10-1/ATGRepositoryGuide/html/s0305multivaluedpropertyqueries01.html

Другие вопросы по тегам