dea*_*mon 23 java jpa exception-handling exception constraints
当违反唯一约束时,javax.persistence.RollbackException
抛出a.但是可能有多种理由抛出一个RollbackException
.如何才能发现违反了一个独特的约束?
try {
repository.save(article);
}
catch(javax.persistence.RollbackException e) {
// how to find out the reason for the rollback exception?
}
Run Code Online (Sandbox Code Playgroud)
Pas*_*ent 19
如何才能发现违反了一个独特的约束?
异常是链接的,您必须getCause()
递归调用以获取提供程序特定的异常(并且可能会转到SQLException
)将其转换为您的应用程序可以很好地为您的用户处理的内容.以下将打印异常链:
for (t = e.getCause(); t != null; t = t.getCause()) {
logger.debug("Exception:" + t);
}
Run Code Online (Sandbox Code Playgroud)
对于异常处理和"翻译",你可以做类似Spring的事情(参见各种JpaDialect
类,例如HibernateJpaDialect
获得一个想法).
所有这些都不好,这段代码不可移植,找到导致违规的属性并不容易.这在某种程度上证实了在JPA中没有优雅且可移植的方式来处理约束违规.
小智 8
您可以使用以下内容:
如果您使用 spring 框架,那么您可以使用:
org.springframework.dao.DataIntegrityViolationException
如果可以使用以下标准 JPA
org.hibernate.exception.ConstraintViolationException
在 sql 级别可以使用以下内容:
java.sql.SQLIntegrityConstraintViolationException
归档时间: |
|
查看次数: |
39055 次 |
最近记录: |