# org.hibernate.MappingNotFoundException



## Saxony (9. Jul 2009)

Hiho,

bin gerade etwas am Verzweifeln! 

Ich versuche gerade meiner hibernate.cfg.xml beizubringen eine Resource zu laden: User.hbm.xml


```
<mapping resource="User.hbm.xml" />
```

Dies will aber auf gedeih und verderb nicht klappen.


```
org.hibernate.MappingNotFoundException: resource: User.hbm.xml not found
```

Die User.hbm.xml befindet sich im gleichen Ordner wie die hibernate.cfg.xml. Selbst die Angabe des absoluten Pfades nützt nix. Ich habe auch schon versucht die Resource nicht über das config xml zu laden, sondern per source:


```
URL urlConfig = UserDBHandler.class.getResource("hibernate.cfg.xml");

Configuration config = new Configuration();
config.configure(urlConfig);
config.addResource("User.hbm.xml");
```

Interessant ist hier auch, dass ich auch schon die hibernate.cfg.xml nur über class#getResource URL hinzufügen kann. Ein normales config.configure() findet nämlich auch keine hibernate.cfg.xml. Nun wollte ich aber auch mal das Gleiche mit der User.hbm.xml versuchen.


```
URL urlConfig = UserDBHandler.class.getResource("hibernate.cfg.xml");
URL urlUser = UserDBHandler.class.getResource("User.hbm.xml");

Configuration config = new Configuration();
config.configure(urlConfig);
config.addResource(urlUser.getPath());
```

Das klappt auch nicht. Ich habe die beiden XML Files auch schon an allen möglichen Stellen innerhalb des Projektes kopiert - mit gleichem Ergebnis.

Kann es auch daran liegen, dass es sich bei Eclipse RCP Anwendungen anders verhält bei den Pfadangaben? Nur aber wieso findet er die hibernate.cfg.xml aber nicht die User.hbm.xml?

Alles sehr verwirrend! ???:L

bye Saxony


----------



## Saxony (9. Jul 2009)

Hiho,

um die Verwendung einer User.hbm.xml zu umgehen, habe ich mal Hibernate Annotations verwendet.

Also @Entity @Table usw in meine Klasse rein.

Dann mache ich folgendes:


```
URL urlConfig = UserDBHandler.class.getResource("hibernate.cfg.xml");

		
AnnotationConfiguration config = new AnnotationConfiguration();
config.configure(urlConfig);
config.addAnnotatedClass(User.class);
```

Tja leider annähernd das Gleiche:


```
org.hibernate.MappingException: Unable to load class declared as <mapping class="de.myproject.User"/> in the configuration:
```

Das Selbe auch wenn ich AnnotationConfiguration#addAnnotatedClass weglasse und es in die hibernate.cfg.xml schreibe:


```
<mapping class="de.myproject.User" />
```

Wieso findet der meine MappingFiles (User.hbm.xml) bzw. jetzt neu auch meine Klassen (User) nicht?

bye Saxony


----------



## maki (9. Jul 2009)

> Die User.hbm.xml befindet sich im gleichen Ordner wie die hibernate.cfg.xml.


Wenn es sich nicht um das default package handelt (d.h. die User.hbm.xml ist auch im default package), musst du den Pfad angeben:
[xml]
<mapping resource="pfad/zur/User.hbm.xml" />
[/xml]


----------



## Saxony (9. Jul 2009)

Bleibt das Gleiche:


```
org.hibernate.MappingNotFoundException: resource: de/myproject/model/User.hbm.xml not found
```

bye Saxony


----------



## maki (9. Jul 2009)

Wenn du Eclipse nutzt, ist dann die user.hbm.xml auch im bin Ordner?


----------



## Saxony (9. Jul 2009)

Also wenn ich im Dateisystem nachshcaue ist im bin ordner auch meine User.hbm.xml.


----------



## JohannisderKaeufer (9. Jul 2009)

Mit maven hatte ich das Problem, das ich die hbm.xml unter src/main/resources ablegen mußte.

Im src/main/java Verzeichnis wurden die mappingdateien ignoriert.


----------



## maki (9. Jul 2009)

JohannisderKaeufer hat gesagt.:


> Mit maven hatte ich das Problem, das ich die hbm.xml unter src/main/resources ablegen mußte.
> 
> Im src/main/java Verzeichnis wurden die mappingdateien ignoriert.


Das ist kein Problem, das ist Konvention 

Saxony, sieh doch mal mt einem Dateibrowser nach, ob die Dateien im bin Ordner landen (falls du "plain" Eclipse nutzt), oder rekonfiguriere die Filter für den Packageexplorer in Eclipse.


----------



## Saxony (9. Jul 2009)

Saxony hat gesagt.:


> Also wenn ich im Dateisystem nachshcaue ist im bin ordner auch meine User.hbm.xml.



Die Datei User.hbm.xml ist im bin Ordner des Projektes - bin/de/myproject/model/User.hbm.xml

bye Saxony


----------



## Saxony (13. Jul 2009)

Hiho,

ich habe mich jetzt durch unzählige Tutorials und Anleitungen gequält. Überall wird Configuration.configure() verwendet. Man soll dazu die hibernate.cfg.xml im "project-root-verzeichnis", in "Meta-Inf" und sonst wo ablegen. Aber er findet bei mir schon diese hibernate.cfg.xml nicht. Ich muss schon mal von vorn herein


```
URL urlConfig = UserDBHandler.class.getResource("hibernate.cfg.xml");
 
Configuration config = new Configuration();
config.configure(urlConfig);
```

verwendeun um überhaupt die hibernate.cfg.xml zu finden. Das es dann bei mir noch die MappingFiles findet (User.hbm.xml) ist schier unmöglich.

Ich habe auch mehrere "normale" Java Projekte aufgesetzt, dort eine hibernate.cfg.xml ins Projekt Root gelegt, eine Main ins default-package - genauso wie es in jedem der 4957943579 gottverdammten Tutorials stand die ich gelesen habe. Es klappt einfach nicht. Configuration.configure() findet keine hibernate.cfg.xml. Meinen Fehler finde ich auch nirgends beschrieben bzw. mal als Post irgendwo im Netz.

Ich habe das gleiche auch komplett ohne Eclipse auf Console versucht -> nichts
Ich habe es als Eclipse RCP versucht -> nichts
Ich habe es als Plug-In für eine Eclipse RCP versucht -> nichts
Ich habe es als normales Java Projekts versucht -> nichts
Ich habe es mit Eclipse 3.3 Europe versucht -> nichts
Ich habe es mit Eclipse 3.4 Ganymade versucht -> nichts
Ich habe es zur Umgehung der *.hbm.xml Files mit Hibernate Annotations versucht -> nichts
Ich habe die hibernate.cfg.xml schon überall wo man es sich nur denken kann innerhalb des Projektes hinkopiert -> nichts
Ich habe absolute Pfadangaben zur hibernate.cfg.xml bzw. zu *.hbm.xml verwendet -> nichts


Wenn ich nicht so ein ruhiger Mensch wäre, hätte hier schon das ein oder andere PeripherieGerät dran glauben müssen. Hmm nagut die Maus musste schon einstecken.

*Also wenn hier jemand einen Tipp hat was ich falsch mache bitte melden!!*

Ich verwende Hibernate 3.3.2 GA

bye (ein sehr gefrusteter) Saxony

PS: Ich hoffe mal es liegt an Satz 2 meiner Signatur!


----------



## byte (13. Jul 2009)

Ist das Verzeichnis der hibernate.cfg.xml denn auch im Build Path? Guck mal in Eclipse unter Project Properties -> Java Build Path -> Source.


----------



## Saxony (13. Jul 2009)

Ja - wenn ich es in nem src-package habe ist es ja sowieso im Build Path. Ich habe hibernate.cfg.xml auch mal direkt in src/hibernate.cfg.xml kopiert ohne package - es wird einfach nicht gefunden...

Ausserdem funktionieren ja selbst absolute Pfadangaben nicht!


----------



## Saxony (13. Jul 2009)

Hiho,

naja vielleicht frag ich auch mal anders herum. Ich habe ein Eclipse RCP Projekt und dort eine Klasse src/de.myproject.model.DBUtil.

Innerhalb dieser Klasse möchte ich die hibernate.cfg.xml für die Konfiguration verwenden - und zwar so:


```
Configuration config = new Configuration();
config.configure();
```

Wo muss ich nun innerhalb meines Eclipse RCP Projektes die hibernate.cfg.xml ablegen, damit diese von der Klasse src/de.myproject.model.DBUtil gefunden wird?

bye Saxony


----------



## JohannisderKaeufer (13. Jul 2009)

Ein Hibernate utils, bzw. die SessionFactoryFactory.

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

public class HibernateUtil {
  private static final SessionFactory sessionFactory = buildSessionFactory();
  private static SessionFactory buildSessionFactory() {
     try {
        // Create the SessionFactory from hibernate.cfg.xml
        return new Configuration().configure().buildSessionFactory();
     }
     catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
       System.err.println("Initial SessionFactory creation failed." + ex);
       throw new ExceptionInInitializerError(ex);
    }
  }
  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}
```

Eine Methode zum speichern des Users


```
private void storeUser(User user) {
     Session session = HibernateUtil.getSessionFactory().getCurrentSession();
     session.beginTransaction();
     session.save(user);
     session.getTransaction().commit();
  }
```

Hibernate.cfg.xml im src folder
[XML]<hibernate-configuration>
  <session-factory>
    ...
     <mapping resource="org/packages/User.hbm.xml"/>

  </session-factory>
</hibernate-configuration>[/XML]

User.hbm.xml im src folder unter org/packages
[XML]<hibernate-mapping package="org.packages">

  <class name="User" table="USERS">
  <id name="id" column="User_ID">
   <generator class="native"/>
	</id>
	<property name="firstName" />
	<property name="lastName"/>
  </class>
</hibernate-mapping>[/XML]

Das sollte so funktionieren. Was hast du denn anders?


----------



## Saxony (14. Jul 2009)

JohannisderKaeufer hat gesagt.:


> Was hast du denn anders?



Na nix - genau so habe ich es schon 43574309570 mal versucht.




JohannisderKaeufer hat gesagt.:


> Hibernate.cfg.xml im src folder



Es geht ja schon los, dass die Hibernate.cfg.xml nicht gefunden wird. Sie ist nach 45436 Überprüfungen auch wirklich im src Folder - ebenso ist sie auch im bin Ordner zu finden. Aber nur mit Configuration#configure() wird diese einfach nicht gefunden.


```
14.07.2009 07:03:26 org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
14.07.2009 07:03:26 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
```

Und die Exception dazu:


```
org.hibernate.HibernateException: /hibernate.cfg.xml not found
	at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170)
	at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1453)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1475)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
	at de.myproject.model.UserDBHandler.connectDB(UserDBHandler.java:18)
	at de.myproject.Application.start(Application.java:27)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
```

Tja ich hab da schon keine Ahnung mehr was ich noch ausprobieren sollte. Ich hab es nun auch mal versucht mit Hibernate.cfg.xml und hibernate.cfg.xml - nützt auch nix.
Ich habe es auch mit einer hibernate.properties versucht - nützt auch nix. 

bye Saxony


----------



## Koringar (14. Jul 2009)

Ich weis das klingt komisch aber Versuch mal dort wo du deine 'eclipse.exe' hast die XML mal hinzupacken.
Es kann manchmal vorkommen, wenn man mit InputStreams arbeitet das er automatich dort hin springt wo die aktuelle *.exe ist. Beim testen unter Eclipse eben die exe und bei eigenen RCP's die exe der RCP.


----------



## byte (14. Jul 2009)

```
configuring from resource: /hibernate.cfg.xml
```
 ... der 
	
	
	
	





```
/
```
 sieht irgendwie verdächtig aus.


----------



## Saxony (14. Jul 2009)

Koringar hat gesagt.:


> Ich weis das klingt komisch aber Versuch mal dort wo du deine 'eclipse.exe' hast die XML mal hinzupacken.
> Es kann manchmal vorkommen, wenn man mit InputStreams arbeitet das er automatich dort hin springt wo die aktuelle *.exe ist. Beim testen unter Eclipse eben die exe und bei eigenen RCP's die exe der RCP.



Ich habe es deployed und die hibernate.cfg.exe direkt neben eclipse.exe gelegt -> Fehler wie immer. Wie gesagt auch in einem normalen Java Projekt und selbst komplett ohne Eclipse als KonsoleProjekt mit Texteditor und javac klappt es nicht.

Auch dafür, dass /hibernate.cfg.xml verdächtig aussieht, kann ich nichts, da ich ganz schlicht und einfach Configuration#configure() aufrufe - so wie es auch auf jeder DrecksSeite zu Hibernate steht. Was steht denn sonst in der Fehlermeldung?

Naja noch zwei Tage und ich habe eine Arbeitswoche mit dem Finden der hibernate.cfg.xml verbracht...

Für meinen Projektleiter habe ich erst einmal eine old School JDBC Verbindung zu MSSQL gebaut....

Naja eigentlich wollte ich aber O/R Mapping machen. Ich weiß noch damals im Studium habe ich für eine Belegarbeit JDO und Hibernate verglichen und da hats auch funktioniert. Das war aber bestimmt noch ne 1.x Version von Hibernate.

bye Saxony


----------



## byte (14. Jul 2009)

Welche Version von Hibernate benutzt Du denn? Ich habs damals streng nach dem Tutorial in der Hibernate Doku gemacht und es hat ohne Probleme geklappt.

Du könntest sonst auch einfach auf die Hibernate Config pfeifen und direkt Hibernate über Spring integrieren. Das sollte klappen.


----------



## Saxony (14. Jul 2009)

Saxony hat gesagt.:


> Ich verwende Hibernate 3.3.2 GA



Die hier.


----------



## Saxony (14. Jul 2009)

Hiho,

so da ich nun keine Lust mehr habe, habe ich mir einen eigenen Parser für die hibernate.cfg.xml geschrieben, elcher die Werte ausliest und mittels Configuration#setProperty() dem Hibernate Framework bekannt macht.

Funktioniert im Endeffekt genauso - dachte eigentlich es geht bei hibernate von haus aus! 
Aber scheinbar funktioniert es nur bei 537405740 anderen Nutzern und nicht bei mir. *schnief*

bye Saxony


----------



## JohannisderKaeufer (15. Jul 2009)

Sorry falls ich nochmals alte Wunden aufreisse. Von Eclipse RCP hab ich leider wenig Ahnung. Da mich das Thema allerdings doch ein wenig interessiert, habe ich nochmal ein wenig gesucht und folgendes gefunden.

https://www.hibernate.org/311.html

Durch das "Plugin-gedöns" (ist für mich noch ein wenig intransparent, da keine Ahnung), scheint es für die Class-loader mehrere Möglichkeiten zu geben wo die hibernate.cgf.xml liegen könnte.

In dem Artikel wird jetzt ein Vorschlag gemacht, das anhand eines "buddy loading" zu lösen.

Hattest du das auch schon gelesen/versucht/hat es damit auch nicht funktioniert?


----------



## Saxony (15. Jul 2009)

Hiho,

ja das hatte ich ebenfalls versucht -> also nur mit den zwei Zeilen in den Manifest Files war leider kein Blumentopf zu gewinnen...

bye Saxony


----------



## Saxony (15. Jul 2009)

So naja mit meinem eigenen XML Parser für die hibernate.cfg.xml ist ja schön und gut gewesen. Die Sache hat nur einen Haken...

Ich muss ja auch noch meine MappingFiles bekannt machen.

Dies klappte schon damals direkt in der hibernate.cfg.xml nicht:


```
<mapping resource="User.hbm.xml" />
// oder auch
<mapping resource="de/myproject/model/User.hbm.xml" />
// oder auch
<mapping resource="de.myproject.model.User.hbm.xml" />
```

Nun müsste ich ja die Mapping Files mit Configuration#addClass() bzw. Configuration#addResource() hinzufügen.


```
config.addClass(User.class);
// oder auch - den gleichen weg verwnede ich um Bilder aus meinem resource Plug-In zu fischen
Bundle bundle = Platform.getBundle("de.myproject.resources");
Path path = new Path("hibernate/User.hbm.xml");
URL fileURL = FileLocator.find(bundle, path, null);
config.addResource(fileURL.toString());
// oder auch
URL fileURL = HibernateUtil.class.getResource("User.hbm.xml");
config.addResource(fileURL.toString());
// oder auch
config.addResource(fileURL.toString(), HibernateUtil.class.getClassLoader());
```

Führt mal wieder alles nicht zum Ziel. Naja wenn ichs in ner Woche ne hinbekomme werd ich auf Maurer oder Metzger umschulen. 

bye Saxony


----------

