我对它进行了修改,以便在每次运行中添加新对象,但它只存储第一次运行的结果。后续运行显示原始的两次运行,而在当前运行中添加的两次运行,但不显示其他运行中添加的运行。
如何让它存储新的添加,以便在下一次运行中恢复它们?
package example;
import one.microstream.storage.embedded.types.EmbeddedStorage;
import one.microstream.storage.embedded.types.EmbeddedStorageManager;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class Main {
public static void main(String[] args) {
// Init storage manager
final EmbeddedStorageManager storage = EmbeddedStorage.start();
//storage.setRoot(null);
MyRoot root;
//if storage.root() returns null no data have been loaded
//since there is no existing database, let's create a new one.
if (storage.root() == null) {
System.out.println("No existing Database found, creating a new one:");
root = new MyRoot();
storage.setRoot(root);
}
//storage.root() is not null so we have loaded data
else {
root = (MyRoot) storage.root();
System.out.println("Existing Database found: " + root.myObjects.size());
}
root.myObjects.add(new MyData(UUID.randomUUID().toString()));
root.myObjects.add(new MyData(UUID.randomUUID().toString()));
storage.storeRoot();
root.myObjects.forEach(System.out::println);
storage.shutdown();
}
public static class MyRoot {
public List<MyData> myObjects = new ArrayList<>();
}
public static class MyData {
private String name;
private int intValue;
public MyData(final String content) {
super();
this.name = content;
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
public int getIntegerValue() {
return this.intValue;
}
public void setIntValue(final int integerValue) {
this.intValue = integerValue;
}
@Override
public String toString() {
return this.name + " value: " + this.intValue;
}
}
}我使用这些依赖项:
<dependency>
<groupId>one.microstream</groupId>
<artifactId>microstream-storage-embedded</artifactId>
<version>07.00.00-MS-GA</version>
</dependency>
<dependency>
<groupId>one.microstream</groupId>
<artifactId>microstream-storage-embedded-configuration</artifactId>
<version>07.00.00-MS-GA</version>
</dependency>发布于 2022-08-19 06:47:42
我找到了原因。我认为storeRoot()方法是递归的,可以保存对root.myObjects的更改。事实证明并非如此,我必须显式地调用store(root.myObjects)。此外,在修改对象本身时,我必须调用store(dataObject) --这是修改过的代码,还有修改对象的其他示例:
public static void main(String[] args) {
// Init storage manager
final EmbeddedStorageManager storage = EmbeddedStorage.start();
// storage.setRoot(null);
// storage.storeRoot();
MyRoot root;
//if storage.root() returns null no data have been loaded
//since there is no existing database, let's create a new one.
if (storage.root() == null) {
System.out.println("No existing Database found, creating a new one:");
root = new MyRoot();
storage.setRoot(root);
storage.storeRoot();
}
//storage.root() is not null so we have loaded data
else {
root = (MyRoot) storage.root();
System.out.println("Existing Database found: " + root.myObjects.size());
root.myObjects.forEach(System.out::println);
root.myObjects.forEach(o -> {
o.setIntValue(root.myObjects.size());
});
storage.storeAll(root.myObjects);
}
root.myObjects.add(new MyData(UUID.randomUUID().toString()));
root.myObjects.add(new MyData(UUID.randomUUID().toString()));
storage.store(root.myObjects);
storage.shutdown();
}https://stackoverflow.com/questions/73406253
复制相似问题