2010-08-18 12 views
3

Je voudrais utiliser hibernate (orm) avec le validateur d'hibernation. Au sein de la documentation, nous pouvons trouver les éléments suivants:validateur hibernate

Hors de la boîte, Hibernate Annotations (comme d'Hibernate 3.5.x) se traduira par les contraintes que vous avez définies pour vos entités dans les métadonnées de cartographie. Par exemple, si une propriété de votre entité est annotée @NotNull, ses colonnes seront déclarées comme non nulles dans le schéma DDL généré par Hibernate.

Et voici mon code:

test/MyClass.java

public class MyClass implements Serializable 
{ 
    private long id; 
    @Length(max=36) 
    @NotNull 
    private String myString; 

    public MyClass() {}; 

    public MyClass(String myString) 
    { 
     this.myString = myString; 
    } 

    public long getId() 
    { 
     return id; 
    } 

    public void setId(long id) 
    { 
     this.id = id; 
    } 

    public String getMyString() 
    { 
     return myString; 
    } 

    public void setMyString(String myString) 
    { 
     this.myString = myString; 
    } 
} 

test/MyClass.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated 2010-08-02 21:13:04 by Hibernate Tools 3.3.0.GA --> 
<hibernate-mapping> 
    <class name="test.MyClass" table="my_table" > 
     <id name="id" type="long" unsaved-value="0"> 
      <column name="id" /> 
      <generator class="native"/> 
     </id> 
     <property name="myString" type="string"> 
      <column name="my_string"/> 
     </property> 
    </class> 
</hibernate-mapping> 

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
             "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost/htest</property> 
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.connection.password">root</property> 
    <property name="hibernate.hbm2ddl.auto">update</property> 
    <property name="hibernate.show_sql">true</property> 


    <!-- Mapping files --> 
    <mapping resource="test/myClass.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

et enfin: Test.java

public class Test 
{ 
    public static void main(String[] args) 
    {      
     Session session = null; 
     SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 

     MyClass str1 = null; 
     Transaction tx = null; 
     try 
     { 
      session = sessionFactory.openSession(); 
      tx = session.beginTransaction(); 
      str1 = new MyClass("hello"); 
      session.save(str1); 
      tx.commit(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      session.close(); 
     } 
    } 
} 

Alors, j'attendre à ce que la colonne myString aurait une longueur de 36, mais il a 255 (par défaut) et ne serait pas nulle, mais elle est nulle (la valeur par défaut).

La console imprime les suivantes:

16:35:46,641 INFO SchemaUpdate:155 - Running hbm2ddl schema update 
16:35:46,642 INFO SchemaUpdate:167 - fetching database metadata 
16:35:46,644 INFO SchemaUpdate:179 - updating schema 
16:35:46,647 INFO DatabaseMetadata:119 - table not found: my_table 
16:35:46,649 INFO DatabaseMetadata:119 - table not found: my_table 
16:35:46,650 DEBUG SchemaUpdate:203 - create table my_table (id bigint not null auto_increment, my_string varchar(255), primary key (id)) 
16:35:46,755 INFO SchemaUpdate:217 - schema update complete 
16:35:46,793 DEBUG SQL:111 - insert into my_table (my_string) values (?) 
Hibernate: insert into my_table (my_string) values (?) 

Versions: Geler-distribution 3.5.4-finale-dist et hibernate-validateur-4.1.0.Final-dist

Quelqu'un voit quelque chose mal dans mon code? Des idées?

Merci à l'avance

Répondre

2

Eh bien, vous n'êtes pas à l'aide d'annotations. Au lieu de:

SessionFactory sessionFactory = new Configuration() 
    .configure() 
    .buildSessionFactory(); 

Essayez:

SessionFactory sessionFactory = new AnnotationConfiguration() 
    .configure() 
    .buildSessionFactory(); 

Je proposerais personnellement pleinement aux annotations à savoir également utiliser des annotations à la carte des entités (en fait, je complètement passer à JPA 2.0 et utiliser l'API EntityManager). Mais ce qui précède devrait fonctionner.

+0

AnnotationConfiguration (au lieu de Configuration) a aidé. Merci! – peter

+0

@ piotr286: De rien. –