ConstraintViolationException

ConstraintViolationException

我在JPA2 / Hibernate / Guice环境中处理ConstraintViolationExceptionRollbackException时遇到问题。这两个异常都在bean验证时发生,但是:

当我尝试保留新实体时抛出ConstraintViolationException

当我尝试将实体合并到上下文中时发生RollbackException

这是在表单处理(创建和更新实体)并捕获这些异常很烦人的时候发生的:

try {
    // service.method is annotated with @Transactional
    entity = service.create(formEntity);
} catch (RollbackException re) {
    // occurs while merging the entity
    if (re.getCause() instanceof ConstraintViolationException) {
        errors.process((ConstraintViolationException) re.getCause());
    }
} catch (ConstraintViolationException cve) {
    // occurs while persisting the entity
    errors.process(cve);
}


我不想添加另一个控制流并捕获所有RuntimeException

try {
    // bean validation fails (merge / persist)
} catch (RuntimeException ex) {
    if (errors.process(ex)) {
        // do something with entity
    }
}


是否有可能以某种方式强迫休眠以不将CVE包装到RE中?处理和处理此类异常的最透明,最干的方法是什么?

谢谢

最佳答案

hibernate将所有sql异常包装为RuntimeException(hibernate的功能)..您得到ConstraintViolationException的原因可能是因为某些字段不接受空值,并且在插入时传递了空值。 (如果未显式设置pojo属性的值,则在插入时将其视为null)...

10-05 23:19