如何访问已删除节点的JCR版本?

时间:2019-04-23 08:55:40

标签: java jcr jackrabbit jackrabbit-oak

我想访问一个已删除的节点的javax.jcr.version.VersionHistory以读取元数据并更改标签,或者可能恢复它。我怎样才能做到这一点? JCR VersionManager提供了方法getBaseVersion(java.lang.String absPath)getVersionHistory(java.lang.String absPath),当absPath上的节点已被删除时,尽管数据仍在/ jcr:system /中,但它们会抛出PathNotFoundException。 jcr:versionStorage。

在相关的情况下,我正在使用jackrabbit-oak 1.6.1。非常感谢你!

2 个答案:

答案 0 :(得分:1)

删除版本化节点后,/jcr:system/jcr:versionStorage中仍存在修订数据,如果您有关于该节点的足够信息,则可以搜索其版本nt:frozenNode节点-

--jcr sql2
SELECT * FROM [nt:frozenNode] as n WHERE ISDESCENDANTNODE ([/jcr:system/jcr:versionStorage]) and n.[jcr:title] LIKE "name%"

版本节点可以强制转换为javax.jcr.version.Version;

Version version = (Version) frozenNode.getParent();

并使用VersionManager.restore()-

恢复
VersionManager versionManager = session.getWorkspace().getVersionManager();
versionManager.restore(path, version, true);

答案 1 :(得分:0)

AFAIU,如果删除了版本控制的节点,则无法再基于原始路径访问其版本历史。

这意味着在删除节点之前,您必须跟踪该信息。