1

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

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

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

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

4

2 回答 2

2

更好、更简单的方法是在出现此类异常时处理它们。因为这首先是 try catch 的目的。

如果您在插入/更新之前查询对象,那么您只需添加可能会减慢您的应用程序的代码,因为数据库旅行是资源密集型的。想象一下,如果有 1000 个用户并且应用程序会这样做。

于 2012-10-10T08:49:05.960 回答
0

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

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

于 2012-10-10T09:08:39.097 回答