Ich habe es gestern endlich hinbekommen und es funktioniert sogar.
Und wenn es einmal da steht, ist es sogar recht einfach.
Mit annotations geht es anscheinend genauso leicht, denn ein
Freund von mir, hatte genau das gleiche Problem und er hat es
relativ simpel gelöst, wie ich fande.
Also nochmal zur genauen Struktur:
Code:
Tabelle Module:
module_id <pk>
IDModulverantwortlicher <fk1>
IDStvModulverantwortlicher <fk2>
...
Tabelle Mitarbeiter:
mitarbeiter_id <pk>
...
Und IDModulverantwortlicher soll auf mitarbeiter_id zeigen
und IDStvModulverantwortlicher soll auf mitarbeiter_id zeigen.
Diese sind aber verschieden, deshalb auch <fk1> und <fk2>
Hier der Codeausschnitt aus Module.java mit
AnnotationsCode:
@OneToOne
@JoinColumn(name="IDMODULVERANTWORLICHER")
public Mitarbeiter getMitarbeiter() {
return mitarbeiter;
}
public void setMitarbeiter(Mitarbeiter newMitarbeiter){
this.mitarbeiter = newMitarbeiter;
}
@OneToOne
@JoinColumn(name="IDSTVMODULVERANTWORLICHER")
public Mitarbeiter getStvMitarbeiter() {
return stvMitarbeiter;
}
public void setStvMitarbeiter(Mitarbeiter newStvMitarbeiter){
this.stvMitarbeiter = newStvMitarbeiter;
}
Für eine Bidirektionale Verbindung müssten dann ja theoretisch bei
Mitarbeiter zwei Collections vorhanden sein, die dann entsprechend
auf das jeweilige Modul verweisen, also Stellvertreter oder Hauptverantwortlicher.
Ich selbst habe es Bidirektional mit XML Dateien gemacht und das sieht dann so aus:
Module.hbm.xml
Code:
<many-to-one name="stvMitarbeiter"/>
<many-to-one name="mitarbeiter"/>
Mitarbeiter.hbm.xml
Code:
<bag name="module" >
<key column="mitarbeiter" />
<one-to-many class="Module"/>
</bag>
<bag name="moduleStv">
<key column="stvMitarbeiter"/>
<one-to-many class="Module"/>
</bag>
Ich hoffe, es ist allen Hilfesuchenden mit dem gleichen Problem geholfen. :)