2012-06-13 1 views
1

Grettings !. Je suis trop troublant avec la question suivante ... Je vais essayer d'être aussi clair que possible. Actuellement, j'ai une implémentation Jackrabbit JCR en cours d'exécution dans notre application web. Tout fonctionne bien, mais juste un petit (gros) problème apparaît lorsque vous essayez de faire une recherche spécifique. Pour un bref résumé du type de données stockées, nous avons 3 une classe de nœuds appelée "Entry", qui étend une autre classe de nœuds nommée "BaseEntry" et qui en étend une autre appelée "BaseNode". La classe Entry représente un nœud dans notre système JCR et possède un ensemble de propriétés (mappées en tant qu'attributs dans la classe correspondante), et hérite également des propriétés mappées dans leurs superclasses.JCR, JackRabbit: Création de XPath pour la recherche d'une année de date et de valeurs de propriétés de sous-nœuds

copier et coller, la partie importante de la définition de classe et les propriétés d'intérêt ...

@Node(jcrType = "entry", extend = BaseEntry.class) 
public class Entry extends BaseEntry { 

    ... // nothing really important here 
} 

@Node(jcrType = "baseEntry", extend = BaseNode.class, isAbstract = true) 
public abstract class BaseEntry extends BaseNode { 

    @Collection (jcrType = "attachment", 
     collectionConverter = NTCollectionConverterImpl.class) 
    protected List<Attachment> attachments = new ArrayList<Attachment>(); 

    ... 

} 

@Node(jcrType = "baseNode", isAbstract = true) 
public abstract class BaseNode { 

    @Field(jcrName = "name", id = true) 
    protected String name; 

    @Field(jcrName = "creationDate") 
    protected Date creationDate; 

    ... 
} 

1) Comment puis-je faire pour prédicat sélectionner uniquement les noeuds (entrées) qui ont un spécifique année dans la propriété creationDate en ignorant le reste. L'attribut est de type Date (dans la classe) et je suppose que la propriété est stockée dans un format xs: DateTime je suppose ... je ne sais vraiment pas très bien ... comment cela correspond vraiment à une date dans le système JCR sous-jacent .

Jusqu'à présent, j'arriver à ce ...
il faut quelque chose comme ça //element(*, entry)[getYear(@creationDate) == <year>]

doit être un entier, chaîne, ... je ne sais vraiment pas kwow.

2) Comment je peux créer un prédicat pour sélectionner uniquement les noeuds (entrées) qui contiennent des pièces jointes ayant un nom donné.

Encore une fois la pièce jointe de classe, la partie importante ...

@Node(jcrType = "attachment", discriminator = true) 
public class Attachment extends BaseNode implements Comparable<Attachment> { 
    ... 
} 

je reçois Jusqu'à présent, ce qui fonctionne .. .. mais il doit y avoir une meilleure façon:

//element(*, entry) [jcr:contains(./*,'<nameOfInterest>')] 

Que tous les amis, je m'excuse vraiment pour l'absence d'information dont je pourrais avoir besoin pour mieux comprendre le contexte de l'affaire, je suppose que c'est ce que je peux faire. Je suis assez nouveau à Jackrabbit et JCR, et je dois y mettre les mains (sales), sans savoir très bien ce que je fais .. et inconsciemment ça commence à être très compliqué ...

l'âme charitable peut y répondre, et aider, au moins un peu: D. Merci d'avance. Salutations. Víctor.

Répondre

1

Je ne suis pas un expert, mais je tente de répondre de toute façon:

Question 1

//element(*, entry)[getYear(@creationDate) == <year>] 

Je pense que vous pouvez utiliser:

//element(*, entry)[ 
    @creationDate >= '2001-01-01T00:00:00.0' 
and @creationDate < '2002-01-01T00:00:00.0'] 

Question 2

Sélectionnez uniquement les noeuds (entrées) contenant des pièces jointes ayant un nom donné.

Je ne connais que la requête SQL-2, en utilisant l'égalité sur le nom de noeud. Je ne sais pas si c'est ce que vous cherchez:

select * from [nt:base] where name() = '<nameOfInterest>' 
+0

Merci Thomas !!!! Désolé pour le retard!. – Victor

Questions connexes