2011-01-13 4 views
2

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

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

Кажется, что мне нужно избежать дефиса в моей строке запроса, но я попробовал добавить двойные обратные косые черты, и я получаю тот же результат. Каков правильный способ запуска запросов против 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()); 
    } 

ответ

4

Проблема может заключаться в том, что узел еще не сохранен. Как написано в search documentation, «Имена узлов и значения свойств индексируются, как только данные сохраняются или как только транзакция будет совершена».

В этом случае, я думаю, вы могли бы использовать Session.getNodeByIdentifier(String id) вместо использования запроса. Это должно быть намного быстрее.

+0

спасибо. Я добавил простой session.save() после установки и перед запросом, и он сработал. – Steve

Смежные вопросы