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