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

How can I access a JCR Version of a deleted node?

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

我正在使用 jackrabbit-oak 1.6.1,以防相关。非常感谢!

AFAIU,如果删除版本控制节点,将无法再根据原始路径访问其版本历史。

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

版本节点删除后,修订数据还在/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);