Hibernate version: 3.1.3
Hallo Community!
Ich hab folgendes Problem!
Ich habe 3 Tabellen (A,B,C) mit folgenden Beziehungen untereinander.
A - C = 1:n (eigentlich würde 1:1 genügen)
B - C = 1:n (eigentlich würde 1:1 genügen)
C ist also eine Tabelle die gemeinsam benutzt wird. Es gibt nun 2 Geschäftsklassen (A, B). Die Spalten in C sollen in die Klasse A bzw. B gemappt werden, dass wiederrum sollte mit <join> machbar sein. Nun ist es so, dass eine Zeile der Tabelle C entweder von Tablle A oder von Tabelle B referenziert wird (niemals beide gleichzeitig).
Ich hab nun die Tabelle C mit einem PK versehen und mit 2 unabhängigen FK's die nullable sind. Beim mappen hab ich jetzt das Problem, dass der PK in der Tabelle C nicht gesetzt wird (wie auch ist ja nirgendwo definiert, oder hab ich da was nicht verstanden). Es ist eigentlich so, dass ich mit sequencen arbeite, sprich die id's sollten sich selber setzten, tun sie aber nicht (bsp: Oracle, hier muss man seq.nextVal() aufrufen und die id beim insert explizit setzten). Also funktioniert diese Variante nicht.
Nächste Idee wäre ein zusammengesetzter PK aus den FK's. Damit würde ich mir den eigentlichen PK sparen. Haken an der Sache es ist immer ein Wert des zusammengestzten PK null, und das darf nunmal nicht sein :-(
Die letzte möglichkeit (die mir eigentlich von vornherein nicht gefallen hat), wäre gewesen ein eigene Klasse C zu bilden und diese im Mapping zu berücksichtigen. Also das Erstellen, Ändern und Löschen der Daten die die tabelle C betreffen versteckt in den Klassen A bzw. B zu machen. Haken ist. Wenn ich zB. im Konstruktor der Klasse A ein Objekt der Klasse C instanziere und dieses entsprechend dem Property zuweise wird es nicht gespeichert/persistiert (es wird kein instert für die tabelle C generiert/abgesetzt).
Gibt es andere Möglichkeiten/Workarounds wie ich folgendes Problem lösen kann???
Oder gibt es eine Lösung wie ich bei einem <join> Mapping (erste Variante) PK mittels sequencen (also <generator class="native"/>)
einbauen kann.
Zusätzliches Problem:
Anscheinend ist es nicht erlaubt in einer Mapping-Datei (class) den Tag <join> und <subclass> gleichzeitig zu verwenden. Gibts da Workarounds?
danke
Tom
|