我正在使用 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());
}