Mar*_*ada 13 jpa java-ee bean-validation
我在Netbeans 7中创建了一个EJB Session facade来保存我的实体.我的保险和RatePlan类之间有很多映射.
public class Insurance{
@ManyToOne(optional=false)
@JoinColumn(name="PLAN_ID")
private RatePlan plan;
}
public class RatePlan{
@OneToMany(mappedBy="plan")
private Set<Insurance> insuranceItems;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用EJB会话Bean保存数据库时,遇到以下错误.
引起:javax.validation.ConstraintViolationException:在回调事件上执行自动Bean验证时违反了Bean验证约束:'prePersist'.有关详细信息,请参阅嵌入式ConstraintViolations.
我所做的是在我的Persistence.xml文件中关闭我的Bean验证.我想知道发生了什么Bean验证错误,但我不知道如何或在哪里找到它或如何配置和捕获它.
我的EJB外观是一个像tis这样的简单类.
public class InsuranceFacade{
public void saveInsurance(Insurance insurance){
em.persist(insurance);
}
}
Run Code Online (Sandbox Code Playgroud)
任何提示?
str*_*ine 11
我想知道发生了什么Bean验证错误,但我不知道如何或在哪里找到它或如何配置和捕获它.
要知道发生了哪些特定的约束违规,您可以检查捕获的异常.ConstraintViolationException.getConstraintViolations()返回一组ConstraintViolation,您可以迭代和检查它.
小智 7
我遇到了同样的问题,但是经过几个小时寻找答案,最后我找到了....你应该编辑你的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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,此方法将提醒您哪个属性以及验证失败的原因.我希望这对你有用,就像对我一样.
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");
}
Run Code Online (Sandbox Code Playgroud)