# Hibernate Mapping Problem



## SilentJ (26. Nov 2006)

Hallo,

ich würde gerne drei Klassen in ein korrektes Hibernate-Mapping überführen, als da wären:

- de.xyz.RegularUser, bildet einen Registrierten Benutzer eines Systems ab. 
- de.xyz.Organisationseinheit, stellt eine Organisationseinheit dar, der Registrierte Benutzer zugeordnet werden können.
- de.xyz.Mitgliedsrolle, welche ordnet einen regularen Benutzer einer Organisationseinheit zu.

Aus Datenbanksicht ergeben sich hierfür in meinem Schema drei Tabellen: regularuser, organisationseinheit und die Tabelle mitgliedsrolle, die die Assoziationsklasse Mitgliedsrolle abbildet.

Ein reg. Benutzer kann Mitglied mehrerer Organisationseinheiten sein, auf der anderen Seite besitzt eine Organisationseinheit mehrere reg. Benutzer.

Die relevanten Teile der hbm.xml-Dateien sehen so aus:


```
<class name="de.xyz.RegularUser"
	table="regularuser">
		
		<id name="id" unsaved-value="0">
			<generator class="native" />
		</id>
```


```
<class name="de.xyz.Organisationseinheit" table="organisationseinheit" >
		
		<id name="id" unsaved-value="0">
			<generator class="native" />
		</id>
```

Das Mapping der Assoziationsklasse sieht so aus:


```
<hibernate-mapping auto-import="true">
	<class name="de.xyz.Mitgliedsrolle" 
		table="mitgliedsrolle">
	<composite-id>
		<key-property name="userID"></key-property>
		<key-property name="oID"></key-property>
	</composite-id>
	
	<many-to-one name="regularuser" column="userID" ></many-to-one>
	<many-to-one name="organisationseinheit" column="oID"></many-to-one>
```

Die Fehlermeldung, die ich beim Starten meiner Webanwendung erhalte, ist dann aber:


```
field [regularuser] not found on de.xyz.Mitgliedsrolle
```

Meine Hibernate Kenntnisse sind nicht sehr tiefgehend. Also bitte ich um eure Hilfe.   

Michael[/code]


----------



## kama (26. Nov 2006)

Hi,

Du solltest vielleicht mal die Fehlermeldung:


```
field [regularuser] not found on de.xyz.Mitgliedsrolle
```
genauer lesen.

Das bedeutet doch einfach, dass das Feld "regularuser" in der angegebenen Klasse so nicht existiert.

Annahme:
Tippfehler oder ganz anderer Name z.B. "userId" o.ä.

das hat mit Hibernate erstmal nichts zu tuen.

MfG
Karl Heinz


----------



## SilentJ (26. Nov 2006)

Danke für die Hilfe.

Die Fehlermeldung habe ich gelesen, hat mich nur nicht zu einer entgültigen Lösung gebracht.   

Ich schreibe mal, wie ich bisher Hibernate bezogen auf das Beispiel im allgemeinen und Mitgliedsrolle im besonderen verstanden habe. Auf Datenbankebene weist die Tabelle mitgliedsrolle neben anderen Attributen auch die Attribute userID und oID auf, die für die platte, auf Integerwerten beruhende Verbindung zwischen der regularuser- und organisationseinheit-Tabelle zuständig sind. 

Erzeuge ich über Hibernate ein Objekt aus einem in der Datenbank in der Tabelle mitgliedsrolle gespeicherten Tupel ein Mitgliedsrollen-Objekt, hängen daran dann über die many-to-one-Assoziationen zwei Objekte: ein RegularUser und ein Organisationseinheit-Objekt.

Mein Problem ist jetzt, dass ich nicht wirklich weiß, wie ich die Verbindung in Hibernate zwischen mitgliedsrolle.userID <-> regularuser.id auf der einen, mitgliedsrolle.oID <-> organisationseinheit.id auf der anderen Seite erzeuge. 

RegularUser regularuser;
und 
Organisationseinheit organisationseinheit;

habe ich in der Klasse Mitgliedsrolle hinzugefügt.


----------



## SlaterB (26. Nov 2006)

auch entsprechende public setter und getter?
getRegularuser()
setRegularuser()

auf die Exemplarvariblen wird Hibernate wohl nicht direkt zugreifen


-------

muss man bei many-to-one nicht die Klasse des zugehörigen Objektes angeben?
oder findet Hibernate die automatisch?
abhängig von der Fremdschlüsselbeziehung in der DB oder wo steht diese Info?


----------

