如何在JackRabbit中获得较旧版本的节点的属性



我创建了节点并创建了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.2name ..

我尝试了

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??
}

可以发射查询并获取数据?

我如何实现这一目标?

请回答。

预先感谢。

这是很长的时间

,但据我所记得的,以前版本节点的内容存储为冰冻节点版本节点。。

所以,我认为您可以尝试检索:

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());
}

希望这会有所帮助。

luca是正确的。每个版本都有一个冷冻节点,该节点代表您在签入时的节点。您可以像基本节点一样调用方法。

Version version = ...
Node node = version.getFrozenNode();
String name = node.getName();
// get a property, eg. someStringProperty
String someStringProperty = node.getProperty("someStringProperty").getString();

最新更新