View Single Post
Old 01-03-2009, 13:49   #1
Abdujaparov
Senior Member
 
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
[JAVA]Primi passi hibernate

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.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso