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

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie