Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 对回调事件执行自动Bean验证时违反了Bean验证约束:';预科生';_Jpa_Jakarta Ee_Bean Validation - Fatal编程技术网

Jpa 对回调事件执行自动Bean验证时违反了Bean验证约束:';预科生';

Jpa 对回调事件执行自动Bean验证时违反了Bean验证约束:';预科生';,jpa,jakarta-ee,bean-validation,Jpa,Jakarta Ee,Bean Validation,我在Netbeans 7中创建了一个EJB会话外观,用于保存实体。 我的保险和费率计划类之间有一个多通映射 public class Insurance{ @ManyToOne(optional=false) @JoinColumn(name="PLAN_ID") private RatePlan plan; } public class RatePlan{ @OneToMany(mappedBy="plan") private Set<Insur

我在Netbeans 7中创建了一个EJB会话外观,用于保存实体。 我的保险和费率计划类之间有一个多通映射

public class Insurance{
    @ManyToOne(optional=false) 
    @JoinColumn(name="PLAN_ID")
    private RatePlan plan;
}
public class RatePlan{
    @OneToMany(mappedBy="plan")
    private Set<Insurance> insuranceItems;
}
有什么提示吗

我想知道发生了什么Bean验证错误,但我不知道如何或在哪里找到它,也不知道如何配置和捕获它

要知道发生了哪些特定的约束冲突,只需检查捕获的异常。ConstraintViolationException.getConstraintViolations()返回一组可以迭代和检查的对象。

catch(EJBException e){
catch (EJBException e) {
        @SuppressWarnings("ThrowableResultIgnored")
        Exception cause = e.getCausedByException();
        if (cause instanceof ConstraintViolationException) {
            @SuppressWarnings("ThrowableResultIgnored")
            ConstraintViolationException cve = (ConstraintViolationException) e.getCausedByException();
            for (Iterator<ConstraintViolation<?>> it = cve.getConstraintViolations().iterator(); it.hasNext();) {
                ConstraintViolation<? extends Object> v = it.next();
                System.err.println(v);
                System.err.println("==>>"+v.getMessage());
            }
        }
        Assert.fail("ejb exception");
    }
@SuppressWarnings(“ThrowableSultignored”) 异常原因=e.getCausedByException(); if(导致ConstraintViolationException的实例){ @SuppressWarnings(“ThrowableSultignored”) ConstraintViolationException cve=(ConstraintViolationException)e.getCausedByException();
对于(迭代器我也遇到了同样的问题,但经过几个小时的寻找,我终于找到了答案……您应该编辑AbstractFacade.java类并添加以下代码

public void create(T entity) {

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<T>> constraintViolations = validator.validate(entity);
    if(constraintViolations.size() > 0){
        Iterator<ConstraintViolation<T>> iterator = constraintViolations.iterator();
        while(iterator.hasNext()){
            ConstraintViolation<T> cv = iterator.next();
            System.err.println(cv.getRootBeanClass().getName()+"."+cv.getPropertyPath() + " " +cv.getMessage());

            JsfUtil.addErrorMessage(cv.getRootBeanClass().getSimpleName()+"."+cv.getPropertyPath() + " " +cv.getMessage());
        }
    }else{
        getEntityManager().persist(entity);
    }
}
public void创建(T实体){
ValidatorFactory=Validation.buildDefaultValidatorFactory();
Validator Validator=factory.getValidator();
Set constraintViolations=validator.validate(实体);
if(constraintViolations.size()>0){
迭代器迭代器=constraintViolations.Iterator();
while(iterator.hasNext()){
ConstraintViolation cv=iterator.next();
System.err.println(cv.getRootBeanClass().getName()+“+cv.getPropertyPath()+”+cv.getMessage());
JsfUtil.addErrorMessage(cv.getRootBeanClass().getSimpleName()+“+cv.getPropertyPath()+”+cv.getMessage());
}
}否则{
getEntityManager().persist(实体);
}
}
现在,此方法将提醒您哪个属性以及验证失败的原因。
我希望这对您和我都有效。

捕获以下在持久化实体时出现的异常。在我的情况下,它在EJB add方法中。我正在执行的是
em.persist()
。然后检查服务器日志,您将看到哪个属性存在约束冲突

catch (ConstraintViolationException e) {
       log.log(Level.SEVERE,"Exception: ");
       e.getConstraintViolations().forEach(err->log.log(Level.SEVERE,err.toString()));
    }

您好,stratwine,您的意思是在我的EJB facade类和save操作中,我会使用try-catch块来检查此异常吗?您能确认我的理解吗?谢谢,通过内联的博客文章展示了如何将ConstraintViolationException作为ApplicationException,从而“按原样”获得它在客户端中。对我来说,在调用的客户端上有一个catch块,检查违反的内容似乎很好。我很想知道,当这些实体中没有特定于bean验证的注释时,会发生什么违反行为!我实际上删除了所有bean验证注释,以便代码更易于阅读…=)
catch (ConstraintViolationException e) {
       log.log(Level.SEVERE,"Exception: ");
       e.getConstraintViolations().forEach(err->log.log(Level.SEVERE,err.toString()));
    }