以下代码段用于使用ModeShape向节点添加标签。我可以使用什么查询字符串来使用QueryManager查询此节点?似乎无法使用QueryManager查询versionHistory端的节点。
VersionHistory history = session.getWorkspace().getVersionManager()
.getVersionHistory(node.getPath());
history.addVersionLabel(version.getName(), "label", true);
我找不到任何包含以下与版本历史记录相关的查询的节点。这个查询中有什么遗漏吗?
Query query = queryManager
.createQuery("select * from [nt:base]", Query.JCR_SQL2);
谢谢!
答案 0 :(得分:1)
所有版本信息都存储在工作区nt:versionHistory
区域下的/jcr:system/jcr:versionStorage
节点上(在存储库中的所有工作区之间共享)。这个区域的结构看起来像这样:
+ jcr:system
+ jcr:versionStorage {jcr:primaryType = mode:versionStorage}
+ b4 {jcr:primaryType = mode:versionHistoryFolder}
+ 6d {jcr:primaryType = mode:versionHistoryFolder}
+ de {jcr:primaryType = mode:versionHistoryFolder}
+ 298905f76361779339fa3ccacc4f47664255 {jcr:primaryType = nt:versionHistory}
+ jcr:versionLabels {jcr:primaryType = nt:versionLabels}
+ jcr:rootVersion {jcr:primaryType = nt:version}
- jcr:uuid = ...
- jcr:created = ...
+ jcr:frozenNode {jcr:primaryType = nt:frozenNode}
- jcr:frozenUuid
- jcr:frozenPrimaryType
- jcr:frozenMixinTypes
jcr:versionLabels
节点包含每个标签的属性,其中属性的名称是标签字符串,属性的值是对该标签所适用的版本的引用。
为了找到可版本化节点的标签版本,您实际上必须查询此" / jcr:system / jcr:versionStorage"的内容。区域,使用适当的类型和连接约束。
例如,要查找具有特定标签" foo"的版本,您可以执行以下操作:
SELECT versioned.* FROM [nt:frozenNode] AS versioned JOIN [nt:version] AS version ON ISCHILDNODE(versioned,version) JOIN [nt:versionLabels] AS label ON label.myLabel = version.[jcr:uuid]
搜索所有nt:versionLabels
个节点,寻找名为' myLabel' (这是您的标签的名称),然后找到它指向的nt:version
节点,以及nt:frozenNode
,它是该版本的可版本化节点的副本。
如您所见,JCR规范规定的版本历史表示很难查询。
或者,您可以分两步完成此操作:
jcr:uuid