private void traverseAndDelete(Object candidate) {
if (candidate != null) {
// Don't cascade delete on values.
if (!(candidate instanceof Persistent.Value)) {
traverseAndExecute(candidate, new Procedure() {
public void execute(Object object) {
traverseAndDelete(object);
}
});
}