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.

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne