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 db = Db4o.openFile(DBFILE); 03
try { 04
// set cascadeOnDelete in order to delete member objects 05
db.ext().configure().objectClass(ListObject.class).cascadeOnDelete( 06
true); 07
List<ListObject> result = db.<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
db.delete(lo1); 13
} 14
} finally { 15
db.close(); 16
} 17
// check ListObjects and DataObjects in the database 18
db = Db4o.openFile(DBFILE); 19
try { 20
List<ListObject> listObjects = db 21
.<ListObject> query(ListObject.class); 22
System.out.println("ListObjects in the database: " 23
+ listObjects.size()); 24
List<DataObject> dataObjects = db 25
.<DataObject> query(DataObject.class); 26
System.out.println("DataObjects in the database: " 27
+ dataObjects.size()); 28
} finally { 29
db.close(); 30
} 31
}