JCR SQL2 сравнивает свойства на одном узле

У нас есть некоторые узлы с неправильными свойствами, где cq: title не равен cq:summary (мы хотим, чтобы они всегда были равными). Чтобы найти их, я печатаю:

SELECT * FROM [nt:base] AS s WHERE s.[cq:title] <> s.[cq:summary]

Я получаю ошибку:

expected: static operand

Я читал, что мы не можем сравнивать свойства под одним узлом. Мне нужен обходной путь, пожалуйста!

1 ответ

Решение

Я предлагаю написать небольшой сервлет, который перебирает все страницы и выполняет сравнение на уровне свойств JCR.

Используя рекурсивный метод, это довольно легко реализовать, просто найдите корень, из которого вы хотите проверить, и вызовите метод:

private void checkChildren(Page parent) {
    Iterator<Page> children = parent.listChildren();
    while (children.hasNext()) {
        Page child = children.next();
        ValueMap props = child.getProperties();
        String title = props.get("jcr:title", String.class);
        String summary = props.get("jcr:summary", String.class);
        if (title != null && summary!=null && !title.equals(summary)) {
            //do something with it
        }
        checkChildren(child);
    }
}
Другие вопросы по тегам