Spring数据JPA和Hibernate:数据库约束的异常处理
目前,我通过检查StackTrace中是否出现注释中定义的约束名称来处理Spring数据JPA和Hibernate:数据库约束的异常处理,jpa,exception-handling,constraints,Jpa,Exception Handling,Constraints,目前,我通过检查StackTrace中是否出现注释中定义的约束名称来处理javax.persistence.PersistenceException 有没有更优雅的方法来解决这个问题 Spring验证非常简单,因为ConstraintViolationException提供了属性名和约束中定义的消息。您可以使用基于控制器的异常处理。 不会。因为您在约束冲突上得到的消息取决于数据库产品。你在使用什么数据库?我目前正在使用H2进行测试。稍后MySQL或Postgres。但是我想让它独立于数据库实现
javax.persistence.PersistenceException
有没有更优雅的方法来解决这个问题
Spring验证非常简单,因为
ConstraintViolationException
提供了属性名和约束中定义的消息。您可以使用基于控制器的异常处理。
不会。因为您在约束冲突上得到的消息取决于数据库产品。你在使用什么数据库?我目前正在使用H2进行测试。稍后MySQL或Postgres。但是我想让它独立于数据库实现。我想大多数数据库至少会返回违反约束的名称。如果它们具有有意义的名称,通常会返回。但最终实现是自定义的,我实际上使用了基于控制器的EXCEPTION处理,返回一个自定义对象,其中包含有关违规的详细信息(哪个字段,等等)。我的问题是如何最好地将数据库错误消息映射到用户友好的错误消息。
@ResponseStatus(value=HttpStatus.CONFLICT,
reason="Data integrity violation") // 409
@ExceptionHandler(DataIntegrityViolationException.class)
public void conflict() {
// Nothing to do
}