Запрос JCR SQL2, сравнивающий имя и путь с подобными

Я пытался выполнить следующий запрос jcr sql2:

        String expression = "SELECT * FROM [nt:base] AS p " +
            "WHERE  NAME(p) like 'opony.txt'";

Но я получил

javax.jcr.UnsupportedRepositoryOperationException. 

Есть ли другой способ поиска узлов с именами типа "% example%"?

Я также пытался найти узлы с указанным путем

        String expression = "SELECT * FROM [nt:base] " +
            "WHERE PATH([nt:base]) like '/a/b'";

Но я получил

javax.jcr.query.InvalidQueryException: Query:
SELECT * FROM [nt:base] WHERE PATH([(*)nt:base]) like '/a/b'; expected: LENGTH, NAME, LOCALNAME, SCORE, LOWER, UPPER, or CAST

Как я могу искать узлы, пути которых похожи на "% example%"?

Я использую JCR_SQL2

javax.jcr.query.Query query = queryManager.createQuery(expression, Query.JCR_SQL2);

person biesczadka    schedule 14.08.2014    source источник


Ответы (1)


Изменить

Пара моментов:

  • Если вы не включите в свой шаблон подстановочный знак, например "%", большой разницы между LIKE и обычным оператором = не будет.
  • PATH () и NAME () поддерживаются не во всех реализациях SQL2. Кажется, они в порядке с JBoss.
  • Для поиска узлов в поддереве используйте функцию ISDESCENDANTNODE ().
  • Есть атрибут [jcr: title], который вы можете протестировать; это не то же самое, что имя узла, но оно может служить вашим целям.

Итак, для вашего первого запроса попробуйте что-нибудь вроде

SELECT * FROM [nt:base] AS p WHERE [jcr:title] like '%opony%'
    and ISDESCENDANTNODE('/content/a/b')

документация JBoss по запросам довольно хорош, но имейте в виду, что он может не совпадать с ванильным Jackrabbit. Я также использовал эту шпаргалку для Магнолии. выполнение.

person David Gorsline    schedule 14.08.2014
comment
На самом деле, не будет ли в запросе использоваться ... WHERE [jcr: name] LIKE ...? - person Randall Hauch; 14.08.2014
comment
Да, за исключением того, что JCR не использует это имя атрибута. Мой ответ как бы перемешанный. Я постараюсь навести порядок. - person David Gorsline; 15.08.2014
comment
Что ж, если бы мне не нужно было «%» в моем шаблоне, я бы не стал просить подобное, я думал, что это очевидно. NAME () работает с '=', поэтому я предполагаю, что это должно быть реализовано. - person biesczadka; 18.08.2014
comment
К сожалению, ваш запрос не находит файлы с именами типа "% opony%". - person biesczadka; 18.08.2014