So lösen Sie javax.jcr.RepositoryException: Eine Abfrage enthält mehr als einen Selektor | AEM

Problem

Wenn Sie die folgende Abfrage ausführen, wird RepositoryException von getNodes() ausgegeben.

Beispielcode:

Session session = resourceResolver.adaptTo(Session.class);
QueryManager queryManager = session.getWorkspace().getQueryManager();

String queryString = "SELECT child.*, page.[cq:lastReplicated] FROM [cq:PageContent] AS page "
              + "INNER JOIN [nt:unstructured] AS child ON ISCHILDNODE(child,page) "
              + "WHERE ISDESCENDANTNODE(page,'/content/geometrixx/en/') ";

Query query = queryManager.createQuery(queryString, Query.JCR_SQL2);
QueryResult result = query.execute();

NodeIterator nodes = result.getNodes();

Ausnahme:

javax.jcr.RepositoryException: Query contains more than one selector: [child, page]
 at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl.getNodes(QueryResultImpl.java:161)

API-Referenz:
https://docs.adobe.com/content/docs/en/spec/javax.jcr/javadocs/jcr-2.0/javax/jcr/query/QueryResult.html#getNodes()
- RepositoryException - Wenn die Abfrage mehr als einen Selektor enthält

Umgebung

AEM

Ursache

Da die Abfrage mehr als einen Selektor enthält, müssen Sie den Selektor (z. B. untergeordnete Elemente oder Seiten) angeben.

Lösung

Verwenden Sie die Methode getRows anstelle von getNodes.

Query query = queryManager.createQuery(queryString, Query.JCR_SQL2);
QueryResult result = query.execute();

RowIterator rows = result.getRows();
while (rows.hasNext()) {
    Row row = rows.nextRow();
    Node node = row.getNode("page");
}

Weitere Informationen

Repository-Ausnahme beim Ausführen der Abfrage (innerer Zusammenschluss) in CQ 5.6
http://help-forums.adobe.com/content/adobeforums/de/experience-manager-forum/adobe-experience-manager.topic.html/forum__4rih-hi_i_am_running.html

Adobe-Logo

Bei Ihrem Konto anmelden