2011-01-13 3 views
2

Jackrabbit을 사용하고 있으며 UUID가있는 기존 노드를 쿼리하려고합니다. 내 코드는 아래와 같습니다. 문제는 referenceNode의 UUID가 " '90be246a-a17c-445e-a5ad-81b064de0bee'"형식이며 Jackrabbit (Lucene)에서 사용 된 XPATH 엔진이 하이픈을 처리하는 데 문제가있는 것 같습니다.UUID에 대한 Jackrabbit 실행 쿼리

query2를 실행하면 모든 것이 잘되고 referenceNode가 인쇄됩니다. Eclipse 내에서 query1 (UUID 포함)을 실행하면 아무 것도 반환되지 않습니다. 그러나 Jackrabbit 뷰어에서 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()); 
    } 

답변

4

노드가 아직 저장되지 않은 것일 수 있습니다. search documentation에 쓰여 있듯이 "노드 이름과 속성 값은 데이터가 저장 되 자마자 색인화되거나 트랜잭션이 커밋되는 즉시 인덱싱됩니다."

이 경우 쿼리 대신 Session.getNodeByIdentifier(String id)을 사용할 수 있습니다. 그것은 훨씬 더 빨라야합니다.

+0

감사합니다. 설치 및 쿼리 이전에 간단한 session.save()를 추가하여 작동했습니다. – Steve