Mise en veille prolongée validateur
-
29-09-2019 - |
Question
Je voudrais utiliser mise en veille prolongée (ORM) avec mise en veille prolongée validateur. Au sein de la documentation que nous pouvons trouver ce qui suit:
Hors de la boîte, Hibernate Annotations (En veille prolongée 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é annotées @NotNull, son colonnes seront déclarés comme non nul dans le schéma DDL généré par Mise en veille prolongée.
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 myString colonne 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).
Les impressions de la console qui suit:
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: mise en veille prolongée distribution-3.5.4-finale-dist et hibernate-validateur-4.1.0.Final-dist
Quelqu'un voit-il quelque chose de mal dans mon code? Toutes les idées?
Merci à l'avance
La solution
Eh bien, vous n'utilisez pas annotations. Au lieu de:
SessionFactory sessionFactory = new Configuration()
.configure()
.buildSessionFactory();
Essayez:
SessionFactory sessionFactory = new AnnotationConfiguration()
.configure()
.buildSessionFactory();
Je personnellement complètement passer à des 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 le travail doit ci-dessus.