Jackrabbit выполняет запросы против UUID - PullRequest
2 голосов
/ 13 января 2011

Я использую Jackrabbit и пытаюсь запросить существующий узел с UUID.Мой код показан ниже.Проблема заключается в том, что UUID для referenceNode имеет вид «90be246a-a17c-445e-a5ad-81b064de0bee», и кажется, что в движке XPATH, используемом в Jackrabbit (Lucene), возникают проблемы с дефисами.

ЕслиЯ запускаю query2, все в порядке, и referenceNode печатается.Если я запускаю query1 (с UUID) внутри Eclipse, ничего не возвращается.ОДНАКО, если я запускаю query1 внутри Jackrabbit Viewer, запрос выполняется нормально.

Кажется, мне нужно экранировать дефисы в моем 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());
  }

1 Ответ

4 голосов
/ 13 января 2011

Возможно, проблема в том, что узел еще не сохранен.Как написано в поисковой документации , «Имена узлов и значения свойств индексируются сразу после сохранения данных или после подтверждения транзакции».Вы можете использовать Session.getNodeByIdentifier(String id) вместо запроса.Это должно быть намного быстрее.

...