1

よろしく!私は次の質問に悩まされすぎています...できるだけ明確にしようと思います。現在、Jackrabbit JCR 実装を Web アプリケーションで実行しています。すべてが正常に機能しますが、特定の検索を実行しようとすると、少し (大きな) 問題が発生します。

格納されるデータの種類を簡単に説明すると、「Entry」という名前のノード クラスが 3 つあります。このノード クラスは、「BaseEntry」という名前の別のノード クラスを拡張し、「BaseNode」という名前の別のノード クラスを拡張します。Entry クラスは、JCR システムのノードを表し、一連のプロパティ (対応するクラスで属性としてマップされる) を持ち、スーパークラスでマップされるプロパティも継承します。

クラス定義の重要な部分と関心のあるプロパティをコピーして貼り付けます...

@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 に答える