PDA

View Full Version : [Java] Problema Hibernate


UnknownSoldier
15-12-2008, 22:00
Salve. E' da poco che mi sono avvicinato ad Hibernate e seguendo varie guide su internet ho provato a costruire una piccola applicazione con Netbeans.

Nuovo progetto ---> Applicazione Java

Vado nelle proprietà del progetto ed importo i file: hibernate3.jar e quella di mysql.

Creo una tabell in mysql denominata "Persona" con 2 colonne stringhe: Nome e Cognome.

Creo il mio JavaBean:

package hibernatetest;

public class Person {

private String nome;
private String cognome;

public String getCognome() {
return cognome;
}

public void setCognome(String cognome) {
this.cognome = cognome;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

}


Creo il programma principale:

package hibernatetest;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Main {

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

Person person = new Person();
person.setNome("Adds");
person.setCognome("asd");

session.save(person);
session.getTransaction().commit();
}

}


Creo i file xml:

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>

<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/mysql</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>

<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>

<mapping resource="Person.hbm.xml"/>

</session-factory>

</hibernate-configuration>


Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

<class name="Person" table="Persona">
<property name="nome"/>
<property name="cognome"/>
</class>

</hibernate-mapping>


Ma quando tento di avviare Main.java viene lanciata questa eccezione:


Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentException
at hibernatetest.Main.main(Main.java:9)
Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 1 more
Java Result: 1


Qualche idea? Vi prego aiutatemi...

Mazzulatore
16-12-2008, 01:15
Scusami, ho provato al volo a quest'ora e non so esserti molto di aiuto...
Premesso che i file xml devono essere nel default package, a me non ha dato quell'errore, ma un altro di convalida del file Person.hbm.xml.

forse manca qualcosa tipo:

<id name="id">
<generator class="native"/>
</id>
come primo elemento dentro il tag class.
Poi mi da un'altro errore perchè non sono andato avanti... non ho aggiunto ID nella classe ne ho configurato un db. C'è anche da specificare il package della classe. il file più o meno è così:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hibernatetest">

<class name="Person" table="Persona">
<id name="id">
<generator class="native"/>
</id>
<property column="nome" name="nome"/>
<property column="cognome" name="cognome"/>
</class>

</hibernate-mapping>

UnknownSoldier
16-12-2008, 08:41
Innanzitutto grazie per la risposta.

Ho aggiunto l'attributo package in Person.hbm.xml e ho spostato entrambi gli xml nel default package, ma mi da sempre lo stesso errore :(

Non ho aggiunto la parte inerente all'id poichè nella mia tabella in mysql non ho specificato un id, ma solo i due campi Nome e Cognome...

gokan
16-12-2008, 09:16
A parte altri possibili piccoli errori.
Direi che al momento prova a risolvere :
org.dom4j.DocumentException

Non so a cosa ti serva di preciso ma ad occhio e croce ti serve il jar di dom4j

banryu79
16-12-2008, 09:18
A parte altri possibili piccoli errori.
Direi che al momento prova a risolvere :
org.dom4j.DocumentException

Non so a cosa ti serva di preciso ma ad occhio e croce ti serve il jar di dom4j
Sì, infatti, nel messaggio dell'Eccezione si vede bene che il Class Loader non ha trovato una definizione per quella classe...

UnknownSoldier
16-12-2008, 12:22
Ma scusate dove la trovo questa classe? Non bastava solo il file hibernate3.jar? o_O

gokan
16-12-2008, 13:03
No, non basta.
Scarica il jar DOM4J (http://sourceforge.net/project/showfiles.php?group_id=16035&package_id=14121)