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

问题描述 投票:0回答:2

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

我正在使用jackrabbit-oak 1.6.1,如果相关的话。非常感谢你!

java jcr jackrabbit jackrabbit-oak
2个回答
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);

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.