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.
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
}