Résolution de javax.jcr.RepositoryException : la requête contient plusieurs sélecteurs | AEM

Problème

Si vous exécutez la requête suivante, elle renvoie RepositoryException à partir de getNodes().

Exemple de code :

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();

Exception:

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

Guide de référence des API :
https://docs.adobe.com/content/docs/en/spec/javax.jcr/javadocs/jcr-2.0/javax/jcr/query/QueryResult.html#getNodes()
RepositoryException - si la requête contient plusieurs sélecteurs.

Environnement

AEM

Cause

Comme la requête contient plusieurs sélecteurs, vous devez spécifier le sélecteur (par exemple, enfant ou page).

Résolution

Utilisez la méthode getRows au lieu de 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");
}

Informations supplémentaires

Exception de référentiel lors de l’exécution de la requête (interne) en CQ 5.6
http://help-forums.adobe.com/content/adobeforums/fr/experience-manager-forum/adobe-experience-manager.topic.html/forum__4rih-hi_i_am_running.html.

Logo Adobe

Accéder à votre compte