编写数据库代码时,我通常会在更新或插入之前检查记录,以防止抛出ConstraintViolationException。
我不等待ContraintViolationException发生然后处理它。这是因为数据库管理员曾告诉我这是一种不好的做法。
但是我看到许多开发人员处理ContraintViolationException和Foreign Key异常,而不是使用sql代码手动检查违规。
问题是?哪个更好?我应该在它们出现时处理这些异常,还是应该在插入/更新操作之前查询对象并防止抛出这些错误?
答案 0 :(得分:2)
更好,最简单的方法就是在它们出现时处理这些异常。因为这首先是try catch的目的。
如果在插入/更新之前查询对象,则只需添加可能会降低应用程序速度的代码,因为数据库跳闸是资源密集型的。想象一下,如果有1000个用户并且应用程序就这样做了。
答案 1 :(得分:0)
没有错误的方法,但请记住,在JPA中执行回滚将导致当前会话的所有托管实体分离。
通常,在捕获异常后执行回滚,这可能会导致bugs that are hard to track down。出于这个原因,我更喜欢在使用JPA时预先使用ckeck。我认为通常情况下,我们现在不应该担心效率,这通常是过早的优化。