# Hibernate - Hbm Files in einem separaten JAR - wie zugreifen



## y0dA (6. Mrz 2008)

Hi!
Also wir haben hier ein Projekt names TMCHibernate, welches die Mapping Files sowie die Klassen dazu besitzt. Nun möchte ich jenes Projekt in ein anderes als JAR inkludieren und mit jenen Objekten arbeiten können.

Wie muss hierzu das Mapping in der hibernate.cxg.xml aussehen?

mfg


----------



## byte (6. Mrz 2008)

Leg die XML-Mappings einfach in der gleichen Package Struktur im separaten Projekt ab wie die Klassen. Dann das Jar einfach in den Classpath machen.


----------



## y0dA (6. Mrz 2008)

Es wird wohl eleganter gehen?

Im Moment mache ich es so:

```
<mapping
		resource="org/pcd/wam/gegenstandsbereich/tmcHibernate/hbm/PersonalName.hbm.xml" />
```

Nur bekomme ich so folgende Exception:

```
Exception in thread "main" org.hibernate.MappingNotFoundException: resource: org/pcd/wam/gegenstandsbereich/tmcHibernate/hbm/PersonalName.hbm.xml not found
	at org.hibernate.cfg.Configuration.addResource(Configuration.java:563)
	at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1587)
	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
	at org.pcd.wam.gegenstandsbereich.tmcHibernate.HibernateUtil.getSessionFactory(HibernateUtil.java:65)
	at org.pcd.wam.gegenstandsbereich.tmcHibernate.HibernateUtil.getCurrentSession(HibernateUtil.java:78)
	at at.pcd.wam.gegenstandsbereich.tmcWeb.common.FillTestDate.main(FillTestDate.java:16)
```

Muss man das Mapping anders machen, wenn man auf ein Mapping File in einem JAR zugreift?


----------



## byte (6. Mrz 2008)

Ist das Jar im Classpath?


----------



## y0dA (6. Mrz 2008)

Ja das JAR TMCHibernate ist im ClassPath von TMCWeb.

TMCHibernate hat folgende Struktur:
Hier liegen die hbms:

```
src\main\java\org\pcd\wam\gegenstandsbereich\tmcHibernate\hbm
```

Hier die Klassen zu den hbms:

```
src\main\java\org\pcd\wam\gegenstandsbereich\tmcHibernate\model\event
src\main\java\org\pcd\wam\gegenstandsbereich\tmcHibernate\model\locating
src\main\java\org\pcd\wam\gegenstandsbereich\tmcHibernate\model\statistic
src\main\java\org\pcd\wam\gegenstandsbereich\tmcHibernate\model\web
```

Wie kann ich dieses JAR ansprechen?
So habe ich es auch schon versucht (Projekt TMCWeb):


```
<mapping jar="TMCHibernate-1.0-SNAPSHOT.jar"
		resource="org/pcd/wam/gegenstandsbereich/tmcHibernate/hbm/PersonalName.hbm.xml" />
```

Ich benutze auch Maven (falls das eine Rolle spielt).

**EDIT**
Nun habe ich mal im TMCHibernate das hbm File in das selbe package wie die Klasse gegeben und in meine hibernate.cfg.xml im TMCHibernate folgendes eingetragen:

```
<mapping jar="lib/TMCHibernate-1.0-SNAPSHOT.jar" class="org.pcd.wam.gegenstandsbereich.tmcHibernate.model.web.PersonalName"/>
```

Weiters das .jar in den lib Ordner des Projektes kopiert und nun bekomme ich folgenden
Fehler:

```
Caused by: org.hibernate.MappingException: Unknown entity: org.pcd.wam.gegenstandsbereich.tmcHibernate.model.web.PersonalName
	at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:550)
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:68)
	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
	at org.hibernate.impl.SessionImpl.load(SessionImpl.java:795)
	at org.hibernate.impl.SessionImpl.load(SessionImpl.java:788)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
	at $Proxy0.load(Unknown Source)
	at org.pcd.wam.gegenstandsbereich.tmcHibernate.dao.GenericHibernateDAO.findById(GenericHibernateDAO.java:71)
	at at.pcd.wam.gegenstandsbereich.tmcWeb.common.FillTestDate.main(FillTestDate.java:27)
```


----------



## y0dA (6. Mrz 2008)

Hab es nun so gelöst dass ich die hibernate.cfg.xml in TMCHibernate lasse und nicht in TMCWeb habe. Weiters gab/gibt es Probleme wenn ich TMCHibernate mittels Maven (mvn install) als JAR erzeuge, da dann nämlich die hbm files fehlen - warum auch immer.

Wenn ich mvn package mache, dann bekomme ich auch die hbm in das JAR.


----------



## byte (6. Mrz 2008)

y0dA hat gesagt.:
			
		

> Hab es nun so gelöst dass ich die hibernate.cfg.xml in TMCHibernate lasse und nicht in TMCWeb habe.


Das hab ich doch oben schon geschrieben, dass Du die gleiche Package-Struktur nehmen sollst. ???:L


----------

