2011-05-23 45 views
4

我在使用JPA 2.0,SpringMvc 3.0尝试在多对多关系中插入新元素时遇到了令人讨厌的错误消息。javax.validation.ConstraintViolationException:在验证preUpdate时违反Bean验证约束

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

多对多关系(表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) 
    } 
) 

我是从我的控制器

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;   
} 

有趣的是,该代码工作正常时调用DAO 代码我不是从网页插入数据。我在这里做错了什么?我已经在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. 

任何指针将非常感激。在此先感谢大家。

回答

5

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

+8

但禁用验证并不能解决问题的核心,它只是忽略它。 – Ralph 2011-05-24 07:05:52

+0

感谢您的支持。但是如果你可以更多地研究它为什么验证是一个问题。请在这里分享。 – 2013-06-22 14:42:56

1

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

JSR 303 Bean验证是注释,如:

  • javax.validation.constraints.NotNull
  • javax.validation.constraints.Size
+0

感谢您的回答。我确实在类级别使用Hibernate验证器注释来验证我的类从窗体绑定它们时的类。但是对于这个特定的班级,我没有指定任何约束条件,这让我觉得这更像是一个内部事物。我不确定从现在开始到哪里去。 – user659580 2011-05-23 12:49:02

+0

user659580:该异常未声明约束违规与类Person相关! – Ralph 2011-05-23 13:59:55

+0

但是当我尝试刷新或提交Persist操作后立即发生异常时。 – user659580 2011-05-23 14:08:21