Question

J'utilise Jackrabbit et je suis en train de requête pour un nœud existant qui a un UUID. Mon code est illustré ci-dessous. Le problème est que UUID pour referenceNode est de la forme « 90be246a-a17c-445F-a5ad-81b064de0bee » et il semble que le moteur de XPATH utilisé dans Jackrabbit (Lucene) a des problèmes traitant des traits d'union.

Si je cours query2, tout va bien et referenceNode est imprimé. Si je lance query1 (avec l'UUID) dans Eclipse, rien est retourné. Cependant, si je lance query1 à l'intérieur Jackrabbit Viewer, la requête fonctionne très bien.

Il semble que je dois échapper aux traits d'union dans mon queryString mais j'essayé d'ajouter slashes et j'obtenir le même résultat. Quelle est la bonne façon d'exécuter des requêtes contre de 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());
  }
Était-ce utile?

La solution

Le problème est peut-être que le nœud n'est pas encore enregistré. Comme il est écrit dans le recherche documentation , « du nom du noeud et des valeurs de propriété sont indexés dès que les données sont ou enregistré dès que la transaction est validée. "

Dans ce cas, je suppose que vous pouvez utiliser Session.getNodeByIdentifier(String id) au lieu d'utiliser une requête. Il devrait être beaucoup plus rapide aussi bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top