I've come across a situation where I need to short-circuit all database writes and deletes for a third-party application. I am using Cayenne 3.0. On the prePersist and preUpdate callbacks, the data object state is set to modified or new, so I can flip it to committed and call the library methods for persisting the data. For preDelete, the state is committed and doesn't flip to deleted until after the callback. I can and have worked around this, but was wondering why the discrepancy exists.
The only thing I can think of is that the data object content is emptied upon deletion so the values wouldn't be available in the preDelete callback. If there is some method of cancelling the delete within a prePersist callback I'd like to know about it. If not, I think this is a necessary addition to the framework. Maybe a this.getObjectContext().pendingDeletedObjects() that can be manipulated to remove an object from the list and short-circuit the delete? Thanks, John