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