4

jcrリポジトリにクエリを実行して、日付プロパティ(jcr:createdなど)が特定の日付よりも若いノードを見つける必要があります。

SQL2を使用して、次のように「jcr:created> date」をチェックします(これは正常に機能します)。

SELECT * FROM [nt:base] AS s WHERE s.[jcr:created] > CAST('2012-01-05T00:00:00.000Z' AS DATE)

ここで注意が必要な部分は次のとおりです。

jcr:created日付に動的に追加する必要がある日数を宣言する追加のプロパティがあります。

プロパティに5(日)が含まれているとすると、クエリは「jcr:created> date」ではなく、「(jcr:created + 5)>date」をチェックする必要があります。プロパティ値10を含む次のノードは、「(jcr:created + 10)>date」でチェックする必要があります。

それを行うことができるインテリジェント/動的オペランドはありますか?プロパティはノード固有であるため、静的にクエリに追加することはできませんが、各ノードのプロパティを読み取る必要があります。

4

3 に答える 3

6

Jackrabbit は現在、このような動的制約をサポートしていません。

現時点での最善の解決策は、固定の日付制約を使用してクエリを実行し、結果を自分で明示的にフィルター処理することだと思います。

別の解決策は、「jcr:created + extratime」の値を事前に計算し、それを追加のプロパティに格納することです。このような計算は、最初にノードを作成/更新するコードに配置するか、観測リスナーに配置して、ノードがどのように変更されているかに関係なくトリガーされるようにすることができます。

于 2012-01-11T16:43:43.897 に答える
2

過去 12 時間以内に作成されたドキュメントを検索する必要がありました

CAST関数で有効な日付を取得する方法に苦労しました.それを必要とする他の人のために貼り付けます.

SimpleDateFormat dateFromat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
cal.setTime(cal.getTime());
cal.add(Calendar.HOUR, -12);

String queryString = "SELECT * FROM [nt:base] AS s WHERE "
            + "ISDESCENDANTNODE([/content/en/documents/]) "
            + "and s.[jcr:created] >= CAST('"+dateFromat.format(cal.getTime())+"' AS DATE)";
于 2013-08-10T07:04:22.917 に答える
0

そこで領収書を見つけました: test.sql2.txt

テストのリスト。私のクエリは次のようになります。

SELECT * FROM [nt:base] where [jcr:created] > cast('+2012-01-01T00:00:00.000Z' as date)

キャスト文字列内のすべてが必要です:+yyyy-MM-ddT00:00:00.000Z

于 2014-03-12T15:23:01.500 に答える