2

Jackrabbitを使用していて、UUIDを持つ既存のノードを照会しようとしています。私のコードを以下に示します。問題は、referenceNodeのUUIDが「 '90be246a-a17c-445e-a5ad-81b064de0bee'」の形式であり、Jackrabbit(Lucene)で使用されているXPATHエンジンでハイフンの処理に問題があるようです。

query2を実行すると、すべてが正常になり、referenceNodeが出力されます。Eclipse内で(UUIDを使用して)query1を実行すると、何も返されません。ただし、Jackrabbit Viewer内で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

1 に答える 1

4

問題は、ノードがまだ保存されていないことである可能性があります。検索ドキュメントに記載されているように、「ノード名とプロパティ値は、データが保存されるとすぐに、またはトランザクションがコミットされるとすぐにインデックスが作成されます。」

Session.getNodeByIdentifier(String id)この場合、クエリを使用する代わりに使用できると思います。それもはるかに速いはずです。

于 2011-01-13T19:07:11.200 に答える