2012-11-06 17 views
0

驗證適用於前端(jsf)。但是,它並沒有得到驗證。我將製造商設置爲空,並將其存儲在數據庫中,而不是拋出違反約束的異常。謝謝。Bean驗證不起作用。我正在使用JPA 2.0和休眠3.3

這裏是我的實體的相關部分:

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.validation.constraints.AssertTrue; 
import javax.validation.constraints.Min; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 


/** 
* The persistent class for the CAR database table. 
* 
*/ 
@Entity 
@Table(name="CAR") 
public class Car implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="CAR_ID") 
    private int carId; 

    @Column(name="MANUFACTURER") 
    @NotNull(message = "A manufacturer is required.") 
    private String manufacturer; 

這裏是我的persistence.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="src_persistence"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>jdbc/BEAN_VALIDATION_DS</jta-data-source> 
     <class> 
      xxx.beanvalidation.persistence.Car 
     </class> 
     <validation-mode>CALLBACK</validation-mode> 
     <properties> 
      <property name="javax.persistence.validation.mode" value="callback"/> 
      <property name="openjpa.Optimistic" value="false"/> 
      <property name="openjpa.LockManager" value="none"/> 
      <property name="openjpa.jdbc.Schema" value="dbo"/> 
      <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory" /> 
      <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> 
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
      <property name="hibernate.current_session_context_class" value="thread" /> 
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

這裏是我的DAO:

+0

您是否嘗試過定義,像這樣的柱,@Column(name = 「製造商」,可爲空= FALSE)?可能不會拋出違反約束條件,但應該拋出異常並且可以捕獲並處理。 – ChadNC

+0

@ChadNC這確實會拋出異常,但我不認爲這是我正在尋找的解決方案。例如,我可以使用這種方法應用這個約束@Size(min = 2,max = 14)嗎? – Dale

+0

您確定事件偵聽器正在啓動嗎?您可以嘗試將@PrePersist添加到您的實體。如果這個方法被調用,我希望Bean Validation也會發生。 – Hardy

回答