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

Schneller und einfacher Hilfe erhalten

Neuer Benutzer?

Adobe MAX 2024

Adobe MAX
Die Konferenz für Kreative

14. bis 16. Oktober in Miami Beach und online

Adobe MAX

Die Konferenz für Kreative

14. bis 16. Oktober in Miami Beach und online

Adobe MAX 2024

Adobe MAX
Die Konferenz für Kreative

14. bis 16. Oktober in Miami Beach und online

Adobe MAX

Die Konferenz für Kreative

14. bis 16. Oktober in Miami Beach und online