2013-08-08 11 views
24

Ich versuche, Hibernate 4.3 mit meiner MySQL-Datenbank arbeiten zu lassen. Ich bin bereits in der Lage, das Tool zur Generierung des Hibernate-Codes in Eclipse zu verwenden, und ich kann auch mithilfe des Hibernate Configurations-Tools eine Verbindung zur Datenbank herstellen.Hibernate 4 javax/transaction/SystemException Fehler

aber wenn ich versuche, Code in meiner Hauptklasse auszuführen, die die Datenbank abfragt ich die folgende Fehlermeldung erhalten:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/SystemException 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Unknown Source) 
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2248) 
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214) 
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:184) 
at be.comp.permanenties.HibernateUtil.<clinit>(HibernateUtil.java:15) 
at be.comp.dao.balie.ZitdagenDAOMySQL.findByMaCode(ZitdagenDAOMySQL.java:31) 
at be.comp.permanenties.Main.main(Main.java:19) 
Caused by: java.lang.ClassNotFoundException: javax.transaction.SystemException 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 8 more 

Der Code in meiner HibernateUtil.java Datei ist:

import org.apache.commons.lang3.SystemUtils; 
import org.hibernate.HibernateException; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.service.ServiceRegistryBuilder; 

public class HibernateUtil { 

private static final SessionFactory sessionFactoryBalie = new Configuration().configure("mysql_balie.cfg.xml").buildSessionFactory(); 

public static SessionFactory getSessionFactoryBalie() { 
    return sessionFactoryBalie; 
} 

} 

Die mysq_balie.cfg.xml Datei wie folgt aussieht:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 

    <!-- Development --> 

    <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/balie?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=iso-8859-1</property> 
    <property name="hibernate.connection.username">username</property> 
    <property name="hibernate.connection.password">password</property> 
    <property name="hibernate.default_catalog">db</property> 

    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> 

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

    <!-- Enable Hibernate's automatic session context management --> 
    <property name="hibernate.current_session_context_class">thread</property> 
    <!-- <property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property>--> 

    <!-- Disable the second-level cache --> 
    <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

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

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

    <!-- List of XML mapping files --> 
    <mapping resource="be/comp/model/balie/Zitdagen.hbm.xml"/> 
</session-factory> 

Ich kann nicht herausfinden, wo der Fehler sein könnte. Jede Hilfe ist willkommen. Vielen Dank.

Antwort

51

Sie vermissen jta.jar
mit Maven hinzufügen, um dieses dep:

<dependency> 
     <groupId>javax.transaction</groupId> 
     <artifactId>jta</artifactId> 
     <version>1.1</version> 
    </dependency> 

oder von Maven-Repository herunterladen und

+0

Gr8 .. Es wurde Fehler in 5.0.6.Final fixiert in 5.0.7.Final –

5

Above Antwort auf Ihre CLASSPATH hinzufügen für Maven Anwendung korrekt ist. Aber in normalen Anwendungen fügen Sie einfach eine JAR-Datei namens jta-1.1.jar hinzu.

-> Wenn Sie die Version 3.x verwenden, steht diese unter dem Pfad des heruntergeladenen Hibernate-Distribution-Jars mit dem Namen lib/required/jta-1.1.jar zur Verfügung.

-> Wenn Ihre Hibernate Version 4.x verwenden, die unter Pfad Distributionsordner zur Verfügung genannt dlist/lib/zur Verfügung gestellt/jta-1.1.jar

+0

In Hibernate 4.3 in der Datei 'jboss-transaktions api_xxx.jar' – Johanna

+0

sehr Dank @subbaReddy –

+0

@Johanna gefunden wird, wo findest du dieses jar (jboss-transaction-api_xxx.jar) in Hibernate 5.1? Oder ein anderes Glas jboss-transaction-api_xxx.jar in 5.1-Version ersetzt? – mannedear

1

Wenn Sie nicht Maven/Gradle verwenden, desto leichter Weg ist, ganzes Bündel anstelle der jar Datei eins nach dem anderen herunterzuladen.

Gehen Sie http://hibernate.org/orm/downloads/ und laden Sie die neueste Bibliothek, extrahieren Sie das Glas aus dem Ordner required.