Ciao a tutti,
sto cercando di capire come funziona Hibernate, ahimè provo da ore
senza il minimo risultato.
Ho installato il plug-in di eclipse Hibernate Syncronizer tramite il
quale ho creato due file xml:
hibernate.cfg.xml:
Codice:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-
configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<!-- local connection properties -->
<property
name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</
property>
<property
name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</
property>
<property name="hibernate.connection.username">angelo</property>
<property name="hibernate.connection.password">palermo</property>
<!-- property name="hibernate.connection.pool_size"></property -->
<!-- dialect for Oracle (any version) -->
<property name="dialect">org.hibernate.dialect.OracleDialect</
property>
<property name="hibernate.show_sql">false</property>
<property
name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</
property>
</session-factory>
</hibernate-configuration>
Person.hbm.xml:
Codice:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="prova">
<class
name="Person"
table="PERSON"
>
<meta attribute="sync-DAO">true</meta>
<id
name="Id"
type="integer"
column="ID"
>
<generator class="sequence"/>
</id>
<property
name="Firstname"
column="FIRSTNAME"
type="string"
not-null="true"
length="45"
/>
<property
name="Lastname"
column="LASTNAME"
type="string"
not-null="true"
length="45"
/>
</class>
</hibernate-mapping>
Da questi file xml mi vengono generate alcune classi java:
package <<prova>>
classi
-Prova;
package <<prova.base>>:
classi:
-_BaseRootDao;
-BasePerson;
-BasePersonDao;
package <<prova.dao>>:
classi:
-_RootDao;
-PersonDao;
package <<prova.dao.iface>>:
interfaccia:
PersonDao;
Per provare ho creato questa classe qui:
Codice:
public class Prova {
/**
* @param args
*/
public static void main(String[] args)throws HibernateException {
// TODO Auto-generated method stub
_RootDAO.initialize();
prova.dao.iface.PersonDAO dao = new prova.dao.PersonDAO();
Person nuova = new Person(null, "Alessandro", "Del Piero");
dao.save(nuova);
}
}
Risultato:
Quote:
Exception in thread "main" org.hibernate.HibernateException:
java.lang.NoClassDefFoundError: javax/transaction/Synchronization
at prova.base._BaseRootDAO.throwException(_BaseRootDAO.java:733)
at prova.base._BaseRootDAO.run(_BaseRootDAO.java:762)
at prova.base._BaseRootDAO.save(_BaseRootDAO.java:605)
at prova.base.BasePersonDAO.save(BasePersonDAO.java:109)
at Prova.main(Prova.java:20)
Caused by: java.lang.NoClassDefFoundError: javax/transaction/
Synchronization
at org.hibernate.impl.SessionImpl.<init>(SessionImpl.java:240)
at org.hibernate.impl.SessionFactoryImpl.openSession
(SessionFactoryImpl.java:503)
at org.hibernate.impl.SessionFactoryImpl.openSession
(SessionFactoryImpl.java:527)
at org.hibernate.impl.SessionFactoryImpl.openSession
(SessionFactoryImpl.java:535)
at prova.base._BaseRootDAO.getSession(_BaseRootDAO.java:64)
at prova.base._BaseRootDAO.getSession(_BaseRootDAO.java:42)
at prova.base._BaseRootDAO.run(_BaseRootDAO.java:743)
... 3 more
Caused by: java.lang.ClassNotFoundException:
javax.transaction.Synchronization
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)
... 10 more
|
Poi sono andato a controllare la classe PersonDao:
Codice:
public class PersonDAO extends BasePersonDAO implements prova.dao.iface.PersonDAO {
public PersonDAO () {}
public PersonDAO (Session session) {
super(session);
}
}
Il metodo save non è implementato.....nonostante l'interfaccia dove save è definito venga implementata....
Sbaglio o manca qualcosa?
Se si come dovrei implementarlo?
Grazie a tutti, ciao ciao.