javax.validation.ConstraintViolationException:在preUpdate验证时违反了Bean验证约束

时间:2011-05-23 04:43:36

标签: model-view-controller spring jpa

尝试使用JPA 2.0,SpringMvc 3.0在多对多关系中插入新元素时,我遇到了一条恼人的错误消息。

我有一张有国家的表和另一张有人的表。一个人可以链接到许多州,一个州可以链接到许多人。 在这种特殊情况下,我有一个listOfStates,然后是一个人,我想在我的多对多关系中插入这些元素。

ManyToMany关系(表格中为STATE)

    //bi-directional many-to-many association to Appointment
    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(
name="PERSON_STATE"
, joinColumns={
    @JoinColumn(name="PERSON_ID", nullable=false)
    }
, inverseJoinColumns={
    @JoinColumn(name="CODE_STATE", nullable=false)
    }
)

DAO代码我正在从我的控制器中调用

try{    
    getEntityManager().getTransaction().begin();            
    getEntityManager().persist(myPerson);                       

    IStateDAO stateDAO = new StateDAO();

    for (int i=0; i<listOfStates.length; i++){
        State myState = stateDAO.findState(listOfStates[i]);
        if (myState != null){                   
            myState.getPersons().add(myPerson);
            getEntityManager().persist(myState);
        }
    }

    getEntityManager().getTransaction().commit();           
    getEntityManager().close();         

} catch (RuntimeException re) {
    getEntityManager().close();
    throw re;           
}

有趣的是,当我没有从网页插入数据时,此代码工作正常。我在这里做错了什么?我已经在DB中有一些人和状态。

完整堆栈错误消息:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details.


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

任何指针都会非常感激。提前谢谢大家。

2 个答案:

答案 0 :(得分:5)

哇!得到它了!我不得不将persistence.xml中的验证模式从Auto更改为 NONE ,这基本上告诉应用程序根本不使用bean验证。错误消息消失了,我的DAO运行良好。

答案 1 :(得分:1)

Exceptions指出使用了JSR 303 Bean Validation,并且在更新任何内容之前配置了Hibernate(Persistence.xml)来检查它们。

JSR 303 Bean验证的注释如下:

  • javax.validation.constraints.NotNull
  • javax.validation.constraints.Size