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”。应通过“(jcr:created + 10) > date”检查包含属性值 10 的下一个节点。

是否有任何智能/动态操作数可以做到这一点?由于该属性是特定于节点的,因此我无法将其静态添加到查询中,但它必须从每个节点中读取它。

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 回答