Exception in thread "main" org.hibernate.MappingException: java.lang.ClassNotFoundException: Message

mrbela

Bekanntes Mitglied
Hey Leute,

ich bin ein absoluter Newbie in Hibernate. Habe gerade mal versucht das erste Beispiel aus einem Buch zu implementieren. Habe soweit alles an meine Bedürfnisse angepasst und kriege folgenden StackTrace:

Java:
Okt 13, 2012 3:50:00 PM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
Okt 13, 2012 3:50:00 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.1.7.Final}
Okt 13, 2012 3:50:00 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Okt 13, 2012 3:50:00 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Okt 13, 2012 3:50:00 PM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
Okt 13, 2012 3:50:00 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
Okt 13, 2012 3:50:00 PM org.hibernate.cfg.Configuration addResource
INFO: HHH000221: Reading mappings from resource: sample/entity/Message.hbm.xml
Okt 13, 2012 3:50:00 PM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace [url=http://hibernate.sourceforge.net/]Hibernate - JBoss Community[/url]. Use namespace [url=http://www.hibernate.org/dtd/]Index of /dtd/hibernate[/url] instead. Refer to Hibernate 3.6 Migration Guide!
Okt 13, 2012 3:50:00 PM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
Okt 13, 2012 3:50:01 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Okt 13, 2012 3:50:01 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 0
Okt 13, 2012 3:50:01 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: false
Okt 13, 2012 3:50:01 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/hibernate]
Okt 13, 2012 3:50:01 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=root, password=****}
Okt 13, 2012 3:50:01 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLInnoDBDialect
Okt 13, 2012 3:50:01 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
Okt 13, 2012 3:50:01 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
Exception in thread "main" org.hibernate.MappingException: java.lang.ClassNotFoundException: Message
	at org.hibernate.envers.configuration.RevisionInfoConfiguration.configure(RevisionInfoConfiguration.java:264)
	at org.hibernate.envers.configuration.AuditConfiguration.<init>(AuditConfiguration.java:102)
	at org.hibernate.envers.configuration.AuditConfiguration.getFor(AuditConfiguration.java:165)
	at org.hibernate.envers.event.EnversIntegrator.integrate(EnversIntegrator.java:64)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:301)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
	at sample.PopulateMessages.main(PopulateMessages.java:21)
Caused by: java.lang.ClassNotFoundException: Message
	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)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.hibernate.annotations.common.util.ReflectHelper.classForName(ReflectHelper.java:143)
	at org.hibernate.annotations.common.reflection.java.JavaReflectionManager.classForName(JavaReflectionManager.java:117)
	at org.hibernate.envers.configuration.RevisionInfoConfiguration.configure(RevisionInfoConfiguration.java:262)
	... 7 more

Meine hibernate.cfg.xml::
[XML]<?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>

<!-- Der JDBC-URL der Datenbank-Instanz -->
<property name="hibernate.connection.url">
jdbc:mysql://localhost/hibernate <!--tetris?user=root&password=-->
<!--jdbc:hsqldb:file:testdb;shutdown=true;-->
</property>

<!-- Die JDBC-Treiberklasse -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
<!--org.hsqldb.jdbcDriver-->
</property>



<!-- Der Benutzername der Datenbank -->
<property name="hibernate.connection.username">root<!--sa--></property>
<!-- Das Kennwort der Datenbank -->
<property name="hibernate.connection.password"></property>


<!-- im Buch isses drin! --> <property name="hibernate.connection.pool_size">0</property>

<property name="hibernate.dialect">
org.hibernate.dialect.MySQLInnoDBDialect<!--HSQLDialect-->
</property>

<property name="hibernate.show_sql">true<!--false--></property>

<!-- Import der Mapping Resourcen -->
<mapping resource="sample/entity/Message.hbm.xml" />

<!--<mapping class="sample/entity/Message" />-->


</session-factory>

</hibernate-configuration>[/XML]

Ich habe diese Datei in meinem Classpath liegen ([...]/bin) und dann in sample/entity/ liegt meine Message.hbm.xml und auch die Message.class

Daher verstehe ich nicht ganz, warum er die Klasse nicht findet. Sie befindet sich ja wie gefordert im gleichen Verzeichnis wie meine Mapping-Datei... :(

Mein Javacode mit dem ich das ganze ausführe ist:
Java:
package sample;


import java.util.Date;

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

import sample.entity.Message;

public class PopulateMessages {

	public static void main(String[] args) {
		
		Configuration config = new Configuration();
//		config.addClass(sample.entity.Message.class);
//		config.setProperties(System.getProperties());
		
		
		SessionFactory factory = config.configure().buildSessionFactory();
		
		
		Session session = factory.openSession();
		session.beginTransaction();
		
		Message m1 = new Message("Nachricht mit Hibernate gespeichert am " + new Date());
		
		session.save(m1);
		session.getTransaction().commit();
		session.close();
		
		// nicht im Buch?!?
//		factory.close();
	}
}

Danke für die Hilfe!!!! Ich weiß es nicht weiter...! :(
 

mrbela

Bekanntes Mitglied
Vlt wär noch interessant zu sagen, dass mein Klassenpfad nur aus den libs besteht, die ich brauche... Muss ich da noch irgendwie was hinzufügen?

habe es ohne Ant-Skript erstellt und in meinem Buch steht irgendwas davon, dass das Skript noch Sachen in den Klassenpfad lädt?!

Muss ich vlt. die Klasse Message (weil er sie ja nicht findet) in den Pfad schreiben o.Ä.?!

Danke für die Hilfe!!!
 

mrbela

Bekanntes Mitglied
Danke, das war genau der richtige Hinweis!!

Damit jetzt alle die Lösung kennen:

Ich hatte in meiner Mapping-Datei (Message.hbm.xml) den Anfangs-Tag nur so:

[XML]<hibernate-mapping>[/XML]

Man muss aber, damit er auch die Klasse Message findet (und somit keine ClassNotFoundException wirft) noch das package angeben, in dem sich die *.hbm.xml-Datei befindet:

[XML]<hibernate-mapping package="sample.entity">[/XML]

et voilà: Er findet die Klasse und das Beispiel funktioniert!!

Das hat mich knapp 6 Stunden Recherche und Fehlersuche gekostet. Na toll! ;)

@Fant: Weißt Du das vielleicht: Das Buch, das ich gerade lese, geht über Hibernate 3. Ich entwickel aber gerade mit Hibernate 4... Liegt das an der neuen Version oder ist es ein Fehler im Buch??
Eigtl sollte man ja meinen, dass alle Hibernate 3 Projekte auch noch fehlerfrei in Hibernate 4 laufen...
 

mrbela

Bekanntes Mitglied
eine zweite Art dies zu lösen:

Man zieht die "Packagestruktur" in das Attribut name vom class-Tag rein

[XML]<hibernate-mapping>
<class name="sample.entity.Message" table="Message">[/XML]
 

Ähnliche Java Themen

Neue Themen


Oben