如何解决ConstraintViolationException?

时间:2018-10-05 07:40:26

标签: java mysql javax.persistence

当我尝试在CRM Web应用程序(PrimeFaces)中保存一些数据时,出现此异常:

Caused by: javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'prePersist'. Please refer to embedded ConstraintViolations for details.

问题是我不知道是什么原因造成的。可悲的是,日志堆栈strace根本不包含任何有用的信息...

我有很多断点,并且还将此ValidatorFactory代码行插入了我在StackOverflow上找到的Insert和Edit方法中(这些位于我的AbstractFacade类中),但是此ValidatorFactory在实际插入之前给了我0个无效实体。保存方法,所以我还是不明智...:

    public T edit(T entity) {
        logger.info("oldVersion {0}", new Object[]{entity.getVersion()});

        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        javax.validation.Validator validator = factory.getValidator();
        Set<ConstraintViolation<T>> constraintViolations = validator.validate(entity);
        if (constraintViolations.size() > 0 ) { 
           logger.error("Constraint Violations occurred.."); 
           for (ConstraintViolation<T> contraints : constraintViolations) {
                logger.error(contraints.getRootBeanClass().getSimpleName()+
                "." + contraints.getPropertyPath() + " " + contraints.getMessage());
            }        
            getEntityManager().persist(entity);              
        }

        try {
            entity = (T) getEntityManager().merge(entity);
        } catch (OptimisticLockException e) {
            JsfUtil.addErrorMessage("Somebody already modified these lines:" + entity.getClass());
            entity = find(entity.getId());
            refresh(entity);
        }

        return entity;
    }

getEntityManager().merge(entity);方法中调用edit()后出现错误。

有人知道现在该怎么办吗?

编辑:

我正在使用Netbeans,EclipseLink(JPA 2.1)和Glassfish。 日志说:“有关详细信息,请参阅嵌入式ConstraintViolations。”

此嵌入式约束违规究竟在哪里?在Glassfish日志中,我没有看到任何与此相关的内容...

我还编辑了persistence.xml:

<property name="eclipselink.logging.level" value="FINEST"/>
<property name="eclipselink.logging.level.sql" value="FINEST"/>

但是重新启动并重新测试后,我仍然只看到相同的日志条目,仅此而已...

0 个答案:

没有答案