约束违规异常,我应该期望它被抛出然后处理它吗?还是我应该阻止它被扔掉



在编写数据库代码时,我通常通过在更新或插入之前检查记录来防止抛出约束违规异常。

我不会等待ContraintViolationException的发生然后处理它。这是因为一位数据库管理员曾经告诉我,这是一种不好的做法。

但是我看到许多开发人员处理 ContraintViolationException 和 Foreign Key 异常,而不是使用 sql 代码手动检查违规行为。

问题是?哪个更好?我应该在出现此类异常时处理它们,还是应该在插入/更新操作之前查询对象并防止抛出这些错误?

更好的是,最简单的方法是在出现此类异常时处理它们。因为这就是尝试捕获的目的。

如果在插入/更新之前查询对象,则只需添加代码,这些代码可能会减慢应用程序的速度,因为数据库行程会占用大量资源。想象一下,如果有 1000 个用户并且应用程序这样做。

没有错误的方法,但请记住,在 JPA 中执行回滚将导致当前会话的所有托管实体分离。

通常,回滚是在捕获异常后完成的,这可能会导致难以跟踪的错误。出于这个原因,我更喜欢在使用 JPA 时事先进行修改。我认为,通常情况下,我们不应该担心效率,这通常是过早的优化。

最新更新