!素不相识 我对以下问题感到非常不安......我会尽可能地保持清醒。 目前我在我们的Web应用程序中运行了Jackrabbit JCR实现。一切正常,但在尝试进行特定搜索时会出现一点点(大)问题。
为了简要概述存储什么类型的数据,我们有一个名为“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。 谢谢你提前。 问候。 维克托。
答案 0 :(得分:1)
我不是专家,但无论如何我都试着回答:
问题1
//element(*, entry)[getYear(@creationDate) == <year>]
我认为你可以使用:
//element(*, entry)[
@creationDate >= '2001-01-01T00:00:00.0'
and @creationDate < '2002-01-01T00:00:00.0']
问题2
仅选择包含名称具有特定名称的附件的节点(条目)。
我只知道SQL-2查询,在节点名称上使用相等。我不确定这是不是你要找的东西:
select * from [nt:base] where name() = '<nameOfInterest>'