When an exception occurs (for example a constraint on a column is violated), the application exits. This is unacceptable in many circumstances. One way round this is to eval() each call to $obj->update() and __PACKAGE__::create(), but this is not always feasible, especially when migrating a legacy app to Class::DBI's object model.
Using Error and _croak() (as described in the docs) are not a good solution either since Class::DBI expects _croak() to throw an exception and will happily fill the void if none is thrown.
IMO, this is a broken design. The app should not be forced to exit if a constraint is not met, since there is a strong possibility that the app can fix the broken data and meet the constraint. What should occur is the create() or update() returns undef and the original data remains unchanged; $@ can be used to contain the text of the exception.
This is bad because one non-eval()'d update can bring down the entire application if the data does not meet the constraint. This is bad in any case but in a web app it is utterly disastrous (consider a user entering an invalid age, e.g.).
Do any workarounds exist?