Cascaded Behavior

You can use different object events to initiate cascaded behavior on update, activate, delete. The following example shows how to ensure that all the referenced objects are deleted when the parent object is deleted:

CallbacksExample.java: testCascadedDelete
01private static void testCascadedDelete(){ 02 fillDB(); 03 final ObjectContainer container = Db4o.openFile(DB4O_FILE_NAME); 04 try { 05 // check the contents of the database 06 ObjectSet result = container.get(null); 07 listResult(result); 08 09 EventRegistry registry = EventRegistryFactory.forObjectContainer(container); 10 // register an event handler, which will delete the pilot when his car is deleted 11 registry.deleted().addListener(new EventListener4() { 12 public void onEvent(Event4 e, EventArgs args) { 13 ObjectEventArgs queryArgs = ((ObjectEventArgs) args); 14 Object obj = queryArgs.object(); 15 if (obj instanceof Car){ 16 container.delete(((Car)obj).getPilot()); 17 } 18 } 19 }); 20 // delete all the cars 21 result = container.query(Car.class); 22 while(result.hasNext()) { 23 container.delete(result.next()); 24 } 25 // check if the database is empty 26 result = container.get(null); 27 listResult(result); 28 } finally { 29 container.close(); 30 } 31 }