lucene - Jackrabbit Ejecutando Consultas contra UUID
xpath jcr (1)
Estoy usando Jackrabbit y estoy tratando de buscar un nodo existente que tenga un UUID. Mi código se muestra a continuación. El problema es que el UUID para referenceNode tiene la forma "''90be246a-a17c-445e-a5ad-81b064de0bee''" y parece que el motor XPATH utilizado en Jackrabbit (Lucene) tiene problemas con los guiones.
Si ejecuto query2, todo está bien y se imprime referenceNode. Si ejecuto query1 (con el UUID) dentro de Eclipse, no se devuelve nada. SIN EMBARGO, si ejecuto query1 dentro de Jackrabbit Viewer, la consulta funciona bien.
Parece que tengo que escapar de los guiones en mi queryString, pero traté de agregar barras diagonales inversas dobles y obtuve el mismo resultado. ¿Cuál es la forma correcta de ejecutar consultas contra 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());
}
El problema podría ser que el nodo aún no está guardado. Tal como está escrito en la documentación de búsqueda , "los nombres de los nodos y los valores de las propiedades se indexan tan pronto como se guardan los datos o tan pronto como se confirma la transacción".
En este caso, supongo que podría usar Session.getNodeByIdentifier(String id)
lugar de usar una consulta. Debería ser mucho más rápido también.