1

特定のプロパティを含む、jackrabbit の jcr ノードのクエリに問題があります。

mixin プロパティを追加するカスタム ノードを追加しました。

<custom = 'http://example.com/mydomain'>
[custom:extensible] mixin
- * (undefined) multiple 
- * (undefined) 

次に、次の方法で nt:file ノードを追加し、それらの nt:file に custom:extensible を追加します

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");

そして今、値が「internal」に等しいプロパティ「sourceSystem」を含むすべての [nt:file] ノードを照会したいと考えています。

ドキュメントを見た後、私は次のようなものを使用する必要があります。

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

また、私が試した他のすべてのクエリは、例外をスローするか、空の結果セットを返します。

解決:

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')
4

1 に答える 1

1

プライマリ タイプと mixin の両方でノードをクエリできますが、JOIN を使用する必要があります。ただし、結合基準は基準である必要がありISSAMENODEます。

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:filecustom:extensible

またSELECT *、結果に重複した列が含まれている可能性があるため、関心のある列を明示的に選択することを検討してください。

于 2013-11-05T14:52:24.307 に答える