我需要查询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”进行检查。
是否有任何智能/动态操作数可以做到这一点?由于属性是特定于节点的,因此我无法将其静态添加到查询中,但必须读取每个节点的属性。
答案 0 :(得分:6)
Jackrabbit目前不支持这种动态约束。
我认为现在最好的解决方案是使用固定日期约束运行查询,然后自己显式过滤结果。
另一种解决方案是预先计算" jcr:created + extratime"价值并将其存储在附加财产中。这样的计算可以位于首先创建/更新节点的代码中,也可以将它放在观察监听器中,这样无论节点如何被修改,它都会被触发。
答案 1 :(得分: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)";
答案 2 :(得分: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