I’ve come across a situation where I’m persisting an object graph and some of the more deeply nested objects cause an error. I do get the appropriate error back, but the error-free objects in the graph were still persisted. For example, the “one” side of a one-to-many were persisted, but the “many” side objects (which had errors) weren’t.
This particular situation could cause a data integrity issue. Control over transactions and rollbacks would be nice, but I think, at a minimum, if any error in any object occurred during a save(), then the entire save() transaction should be rolled back.