如何在hibernate中处理ConstraintViolationException

时间:2013-08-22 13:04:35

标签: hibernate java-ee-6

我正在尝试使用ConstraintViolationException,我创建了一个简单的约束电子邮件并为其实现了验证器:

EmailValidator implements ConstraintValidator<Email, String> { }

我的问题是当我从entityManager调用persist时,它不会捕获异常。我查看了ConstraintViolationException并发现祖先类是RuntimeException所以它没有被检查但是我很困惑,因为我看到很多文章都捕获了相同的异常。

任何人都有任何评论和解决方法吗?

1 个答案:

答案 0 :(得分:0)

此链接解决了我的问题:Catch PersistenceException or ConstraintViolationException in JBoss AS 7

然后作为一种解决方法,我创建了一个电子邮件验证程序,并在我正在验证的字段中添加了一个f:验证器。

@FacesValidator("emailValidator")
public class EmailValidator implements Validator {

public void validate(FacesContext context, UIComponent component,
        Object value) throws ValidatorException {

    ResourceBundle resourceBundle = ResourceBundle.getBundle("messages",
            Locale.ENGLISH);

    if (StringUtils.isBlank(value)) {
        return;
    } else {
        try {
            InternetAddress emailAddr = new InternetAddress(
                    value.toString());
            emailAddr.validate();
        } catch (AddressException ex) {
            FacesMessage facesMessage = new FacesMessage();
            String message = resourceBundle
                    .getString("message.error.invalidEmail");
            message = MessageFormat.format(message,
                    getLabel(context, component));
            facesMessage.setDetail(message);
            facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);

            throw new ValidatorException(facesMessage);
        }
    }

}

在您要验证的字段中添加此内容。

<f:validator for="#{cc.attrs.id}_text" validatorId="emailValidator"></f:validator>