If you don't want to flush after every delete, flush periodically. Or flush when you know you've finished all your deletes. Or whenever. But no exception that is caused by an actual DB update (or delete, in this case) will ever be thrown unless there's a flush involved.
Something like this would do what you need:
Code:
int FLUSH_PERIOD = 20;
int i = 0;
for (B aB : colBsToBeDeleted)
{
session.delete(aB);
if (++i >= FLUSH_PERIOD)
{
session.flush();
i = 0;
}
}
session.flush(); // This is only useful if other work might happen between the deletes and the loadAll().
Now you won't get too many flushes.