Deleting Collections

As it was discussed in Deleting Structured Objects chapter, deleting a top-level object does not mean deleting all of the member objects. The same rule applies for collections. The recommendation would be to use cascadeOnDelete setting for a collection, which should be deleted with all its members.

For the following example we will use DataObject and ListObject classes. The database will be filled up with the FillUpDb method.

ListDeletingExample.java: deleteTest
01private static void deleteTest() { 02 ObjectContainer container = Db4o.openFile(DB4O_FILE_NAME); 03 try { 04 // set cascadeOnDelete in order to delete member objects 05 container.ext().configure().objectClass(ListObject.class).cascadeOnDelete( 06 true); 07 List<ListObject> result = container.<ListObject> query(ListObject.class); 08 if (result.size() > 0) { 09 // retrieve a ListObject 10 ListObject lo1 = result.get(0); 11 // delete the ListObject with all the field objects 12 container.delete(lo1); 13 } 14 } finally { 15 container.close(); 16 } 17 // check ListObjects and DataObjects in the database 18 container = Db4o.openFile(DB4O_FILE_NAME); 19 try { 20 List<ListObject> listObjects = container 21 .<ListObject> query(ListObject.class); 22 System.out.println("ListObjects in the database: " 23 + listObjects.size()); 24 List<DataObject> dataObjects = container 25 .<DataObject> query(DataObject.class); 26 System.out.println("DataObjects in the database: " 27 + dataObjects.size()); 28 } finally { 29 container.close(); 30 } 31 }
Please, remember that there is no referential integrity check on delete: deleted objects might be referenced from elsewhere in your code.