1

问候!我对以下问题有太多的困扰......我会尽可能清楚。目前,我在我们的 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。感谢提前。问候。胜利者。

4

1 回答 1

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>'
于 2012-06-21T10:11:12.693 回答