首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合属性的JCR查询

混合属性的JCR查询
EN

Stack Overflow用户
提问于 2013-11-05 06:51:35
回答 1查看 813关注 0票数 1

我很难查询包含某些属性的jcr节点。

我已经添加了一个自定义节点来向其添加混合属性。

代码语言:javascript
复制
<custom = 'http://example.com/mydomain'>
[custom:extensible] mixin
- * (undefined) multiple 
- * (undefined) 

然后,我以以下方式添加了nt:file节点,并在这些nt:file中添加了我的自定义:extensible

代码语言:javascript
复制
documents = session.getRootNode().getNode(MainJCRConstants.MAIN_NODE);
documentNode = documents.addNode(fileName, NodeType.NT_FILE);
Node resNode = documentNode.addNode(JcrConstants.JCR_CONTENT, NodeType.NT_RESOURCE);
Binary binary = session.getValueFactory().createBinary(ins);
resNode.setProperty(JcrConstants.JCR_DATA, binary);
resNode.addMixin("custom:extensible");
resNode.setProperty("sourceSystem", "internal");

现在,我想查询所有nt:file节点,其中包含属性"sourceSystem“,其值等于”内部“。

在查看了文档之后,我不得不使用类似于:

代码语言:javascript
复制
SELECT parent.* FROM [nt:file] AS parent 
INNER JOIN [custom:extensible] AS child ON ISCHILDNODE(child,parent) 
WHERE CONTAINS(parent.*, 'internal') OR CONTAINS(child.*,'internal')

但这会引发异常http://pastebin.com/ZdxZPf2C

另外,我尝试过的其他查询要么抛出异常,要么返回一个空的结果集。

解决方案:

代码语言:javascript
复制
SELECT * FROM [nt:resource] as res INNER JOIN [custom:extensible] AS ext ON ISSAMENODE(res,ext) WHERE CONTAINS(res.sourceSystem,'internal') OR CONTAINS(ext.sourceSystem,'internal')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 14:52:24

您可以通过主类型和混合类型来查询节点,并且确实需要使用联接。但是,联接条件应该是一个ISSAMENODE标准:

代码语言:javascript
复制
SELECT * FROM [nt:file] AS file
   INNER JOIN [custom:extensible] AS ext ON ISSAMENODE(file,ext)
WHERE CONTAINS(file.*,'internal') OR CONTAINS(ext.*,'internal')

此查询将所有nt:file节点与所有custom:extensible节点连接起来,确保结果中唯一的配对发生在nt:file节点和custom:extensible节点是同一个节点时。

还请注意,SELECT *可能意味着您的结果包含重复的列,因此您可以考虑显式地选择您感兴趣的列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19783341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档