如何在 jackrabbit 中获取旧版本节点的属性?
Posted
技术标签:
【中文标题】如何在 jackrabbit 中获取旧版本节点的属性?【英文标题】:How can I get the property of an older version of a node in jackrabbit? 【发布时间】:2012-12-07 17:27:59 【问题描述】:我已经创建了节点并创建了 3 个版本。
String path = "/my111";
MyClass m1 = new MyClass();
m1.setPath(path);
m1.setName("Myname");
m1.setLanguage("English");
ocm.create(m1);
ocm.save();
for (int i = 0; i < 4; i++)
ocm.checkout(path);
m1.setName("mz676666" + i);
ocm.update(m1);
ocm.save();
ocm.checkin(path);
VersionIterator iterator = ocm.getAllVersions(path);
while (iterator.hasNext())
Version version = (Version)iterator.next();
System.out.println("version::"+version.getName());
Output :
version::jcr:rootVersion
version::1.0
version::1.1
version::1.2
version::1.3
现在我想获得1.2
版本的name
..
我试过了
org.apache.jackrabbit.ocm.version.VersionIterator iterator = ocm.getAllVersions(path);
while (iterator.hasNext())
Version version = (Version)iterator.next();
System.out.println("version::"+version.getName());
MyClass m1 = (MyClass) ocm.getObject(path, version.getName());
System.out.println(m1.getName()); // But it always print `null`. Why??
是否可以触发查询并获取数据?
我怎样才能做到这一点?
请回答这个问题。
提前致谢。
【问题讨论】:
【参考方案1】:很久没有和 Jackrabbit 合作了,所以我可能错了。
但据我记忆,以前版本节点的内容是作为版本节点下的冻结节点存储的。
所以,我认为您可以尝试使用以下方法检索它:
VersionIterator iterator = ocm.getAllVersions(path);
while (iterator.hasNext())
Version version = (Version)iterator.next();
//Here you go:
MarketingZone m1 = (MarketingZone) version.getFrozenNode();
System.out.println(m1.getName());
希望这会有所帮助。
【讨论】:
查看我的编辑。它有效吗?如果没有,您会收到什么错误? 我无法尝试您的代码,因为在 sn-p 中您使用自己的自定义类,而我没有。请告诉我错误,以便我进一步帮助您。【参考方案2】:卢卡是对的。每个版本都有一个冻结节点,它代表您在签入时的节点。您可以像调用基本节点一样在其上调用方法。
Version version = ...
Node node = version.getFrozenNode();
String name = node.getName();
// get a property, eg. someStringProperty
String someStringProperty = node.getProperty("someStringProperty").getString();
【讨论】:
以上是关于如何在 jackrabbit 中获取旧版本节点的属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何学习使用内容存储库和 Apache JackRabbit?