2011-05-23 124 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