我正在使用Jackrabbit,我正在尝试查询具有UUID的现有节点。 我的代码如下所示。问题是referenceNode的UUID格式为“'90be246a-a17c-445e-a5ad-81b064de0bee'”,看起来Jackrabbit(Lucene)中使用的XPATH引擎在处理连字符方面存在问题。
如果我运行query2,一切都很好,并打印referenceNode。 如果我在Eclipse中运行query1(使用UUID),则不返回任何内容。 但是,如果我在Jackrabbit Viewer中运行query1,查询运行正常。
似乎我必须在queryString中转义连字符,但我尝试添加双反斜杠并获得相同的结果。对UUID运行查询的正确方法是什么?
// Set up Nodes
rootNode = session.getRootNode();
Node referenceNode = rootNode.addNode("referenceNode");
Node referencingNode = rootNode.addNode("referencingNode");
referenceNode.addMixin("mix:referenceable");
referencingNode.setProperty("pointer", new ReferenceValue(referenceNode));
// Query
String uuid = referenceNode.getUUID();
QueryManager qm = ws.getQueryManager();
String queryString1 = "//*[@jcr:uuid='"+uuid+"']";
String queryString2 = "//referenceNode";
Query q = qm.createQuery(queryString1, Query.XPATH);
QueryResult result = q.execute();
NodeIterator it = result.getNodes();
while(it.hasNext()) {
Node node = it.nextNode();
System.out.println( node.getName());
}
答案 0 :(得分:4)
问题可能是节点尚未保存。正如在search documentation中所写的那样,“一旦保存数据或提交事务,节点名称和属性值就会被编入索引。”
在这种情况下,我猜您可以使用Session.getNodeByIdentifier(String id)
而不是使用查询。它也应该快得多。