The wrong approach is to try to store disconnected objects. db4o manages object by their object-identity and doesn't recognize objects which have been serialized or loaded by another object container instance. This example shows, that instead of updating the object, db4o will store a new instance of the object.
{
ObjectContainer container = openDatabase();
Pilot joe = queryByName(container,"Joe");
container.close();
// The update on another object container
ObjectContainer otherContainer = openDatabase();
joe.setName("Joe New");
otherContainer.store(joe);
otherContainer.close();
}
{
// instead of updating the existing pilot,
// a new instance was stored.
ObjectContainer container = openDatabase();
ObjectSet<Pilot> pilots = container.query(Pilot.class);
System.out.println("Amount of pilots: "+pilots.size());
for (Pilot pilot : pilots) {
System.out.println(pilot);
}
container.close();
}
So in order to update an object, you need to load and store it in the same object-container. If you cannot do this, you need to merge to object-changes. See "Example Merge Changes"
{
ObjectContainer container = openDatabase();
Pilot joe = queryByName(container,"Joe");
joe.setName("Joe New");
container.store(joe);
container.close();
}
{
ObjectContainer container = openDatabase();
ObjectSet<Pilot> pilots = container.query(Pilot.class);
System.out.println("Amount of pilots: "+pilots.size());
for (Pilot pilot : pilots) {
System.out.println(pilot);
}
container.close();
}