2011-01-13 9 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

関連する問題