如何使用JCR中的SQL从子名称中检索父名称

时间:2014-09-05 17:01:32

标签: java sql jcr magnolia

我在JCR repo中有以下节点结构。我正在努力检索给定子节点(789)的父节点(12345)。

/ 12345 /项目/ 789

I have tried:
SELECT parent.* 
FROM [nt:base] AS parent 
INNER JOIN [nt:base] AS child ON ISCHILDNODE(child,parent)
WHERE name(child) = '789'

但我不断收到“此查询结果包含多个选择器”结果。

我必须使用sql或jcr-sql2来执行此操作,我不想使用java来检索父级的父级。

提前致谢

2 个答案:

答案 0 :(得分:3)

正如兰德尔上面提到的那样 - 查询完全有效。

我不会猜到,但是因为您将此标记为Magnolia我认为您尝试通过AdminCentral / Dev / JCRQueries应用程序执行此查询。这个应用程序不支持选择器。这就是整个问题。如果你使用类似于下面的脚本通过groovy控制台运行它,它将正常工作。

query = "SELECT parent.*  FROM [nt:base] AS parent  INNER JOIN [nt:base] AS child ON ISCHILDNODE(child,parent) WHERE name(child) = '789'"
MgnlContext.getJCRSession("your_workspace").workspace.queryManager.createQuery(query,"JCR-SQL2").execute()

HTH, 扬

答案 1 :(得分:2)

JCR SQL语言不支持连接。

另一方面,JCR-SQL2语言支持支持连接。事实上,我只是尝试了这个精确的JCR-SQL2查询,它在ModeShape中运行得非常好。