首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JCR SQL2查询显然没有传递任何结果

JCR SQL2查询显然没有传递任何结果
EN

Stack Overflow用户
提问于 2013-09-24 09:22:01
回答 1查看 2.4K关注 0票数 1

我试图基于jcr为CQ创建一个页面。我想查询包含属性中特定字符串的页面。

查询本身(JCR-SQL2)如下(我在CQ接口上测试了它并交付了结果):

代码语言:javascript
复制
SELECT
    *
FROM 
    [nt:base] AS s
WHERE
    ISDESCENDANTNODE([/content])
AND
    s.[sling:resourceType] = 'some/path/to/destination'

这是我在JSP页面中的尝试:

代码语言:javascript
复制
    String stmt = "SELECT * FROM [nt:base] AS s WHERE ISDESCENDANTNODE([/content]) AND s.[cq:template] = 'some/path/to/destination'";
    Query query = currentNode.getSession().getWorkspace().getQueryManager().createQuery(stmt, Query.JCR_SQL2);
    QueryResult results = query.execute();
    if (results.getNodes() != null && results.getNodes().hasNext()) {
        NodeIterator it = results.getNodes();

        while (it.hasNext()) {
            Node node = it.nextNode();
            String npath = node.getPath();
            Page contentPage = pageManager.getContainingPage(resourceResolver.getResource(npath));
            String title = contentPage.getTitle();
            String path = contentPage.getPath() + ".html";
            %>
            <div class="searchresult"><a href="<%= path %>"><%= title %></a></div>
            <%
        }
    }

引发的错误如下:

代码语言:javascript
复制
Caused by: javax.jcr.RepositoryException: This query result has already been iterated through
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-24 11:11:49

这不是因为您创建了一个迭代器两次:首先

if (results.getNodes() != null && results.getNodes().hasNext()) {

然后

NodeIterator it = results.getNodes();

我只会尝试像这样只创建一次:

代码语言:javascript
复制
   QueryResult results = query.execute();
   NodeIterator it = results.getNodes();
   if (it.hasNext()) {
   ...
   }

查看SimpleQueryResult的源代码,它做了一些奇怪的事情,实例变量rowIterator被设置为null,所以下次调用getRows时,您将进入条件的其他部分,您将得到您提到的错误:

代码语言:javascript
复制
  public synchronized RowIterator getRows() throws RepositoryException {
        if (rowIterator != null) {
            RowIterator iterator = rowIterator;
            rowIterator = null;
            return iterator;
        } else {
            throw new RepositoryException(
                    "This query result has already been iterated through");
        }
}

https://svn.apache.org/repos/asf/jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/join/SimpleQueryResult.java

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18977563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档