问候!我对以下问题有太多的困扰......我会尽可能清楚。目前,我在我们的 Web 应用程序中运行了一个 Jackrabbit JCR 实现。一切正常,但在尝试进行某些特定搜索时会出现一个小(大)问题。
对于存储哪种数据的简要概要,我们有 3 个名为“Entry”的节点类,它扩展了另一个名为“BaseEntry”的节点类,并扩展了另一个名为“BaseNode”的节点类。Entry 类代表我们 JCR 系统中的一个 Node,并具有一组属性(映射为相应类中的属性),并且还继承了映射在其超类中的属性。
我复制和粘贴,类定义的重要部分和感兴趣的属性......
@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)我如何才能为仅选择那些在属性 creationDate 中具有特定年份的节点(条目)创建谓词,而忽略其余部分。该属性是 Date 类型(在类中),我猜该属性以 xs:DateTime 格式存储我猜......我真的不太清楚......它如何真正匹配 JCR 底层系统中的 Date .
到目前为止,我得到了这个......
必须有这样的东西//element(*, entry)[getYear(@creationDate) == <year>]
必须是整数、字符串……我真的不知道。
2)我如何才能为仅选择那些包含具有特定名称的附件的节点(条目)做出谓词。
再次上课附件,重要的部分......
@Node(jcrType = "attachment", discriminator = true)
public class Attachment extends BaseNode implements Comparable<Attachment> {
...
}
到目前为止,我得到了这个..那是有效的..但必须有更好的方法:
//element(*, entry) [jcr:contains(./*,'<nameOfInterest>')]
所有的朋友,我真的很抱歉没有读者可能需要的信息来更好地理解事情的背景,我想这是我能做的。我对 Jackrabbit 和 JCR 还很陌生,我必须亲自动手(脏),而不知道我在做什么......并且不知不觉它开始变得非常复杂......
好吧,希望任何慈善灵魂都可以回答这个问题,并至少提供一点帮助:D。感谢提前。问候。胜利者。