Hibernate Validator
-
29-09-2019 - |
Frage
Ich möchte Hibernate verwenden (ORM) zusammen mit Hibernate Validator. Innerhalb der Dokumentation können wir folgendes finden:
Aus dem Kasten heraus, Hibernate Annotations (Stand: Hibernate 3.5.x) wird übersetzen die Einschränkungen, die Sie definiert haben Ihre Entitäten in Mapping-Metadaten. Wenn zum Beispiel eine Eigenschaft Ihrer Entität @NotNull kommentiert, sein Spalten werden als nicht für nichtig erklärt werden, in dem DDL-Schema erzeugt durch Hibernate.
Und das ist mein 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>
und schließlich: 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();
}
}
}
Also, ich würde erwarten, dass die Spalte myString eine Länge von 36 haben würde, aber es hat 255 (Standard) und wäre nicht null, aber es ist null (Standardeinstellung).
Die Konsole druckt die folgenden:
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 (?)
Versionen: Hibernate-Verteilung-3.5.4-final-dist und Hibernate-Validator-4.1.0.Final-dist
Hat jemand sehe etwas falsch in meinem Code? Irgendwelche Ideen?
Vielen Dank im Voraus
Lösung
Nun, Sie verwenden nicht Anmerkungen. Statt:
SessionFactory sessionFactory = new Configuration()
.configure()
.buildSessionFactory();
Versuchen Sie:
SessionFactory sessionFactory = new AnnotationConfiguration()
.configure()
.buildSessionFactory();
Ich persönlich würde voll bewegen Anmerkungen heißt auch Annotationen verwenden Entitäten abzubilden (eigentlich würde ich voll und ganz zu JPA 2.0 bewegen und die EntityManager
API verwenden). Aber die oben sollte funktionieren.