Hallo *,
ich habe ein Objekt von der Klasse A, das enthält eine Map von Objekten der Klasse B. Jetzt gibts zusätzlich noch eine Klasse BTupel, die von B abgeleitet ist, und 2 Objekte vom Typ B referenziert, der komplette Objektbaum sieht also so aus:
Code:
B1
/
A - B2
\
BTupel1 - B3
\
B4
Nun möchte ich A und alle abhängigen Bs persistieren. BTupel ist nur eine Hilfsklasse, die zur Laufzeit verwendet wird, und deren Instanzen nicht selbst persistiert werden sollen, sondern die referenzierten Bs. Es müssen also nur A und die tatsächlichen Bs persistiert werden, im obigen Beispiel A, B1, B2, B3 und B4. Wenn ich A und B einfach annotiere, werden A, B1, B2 und BTupel1 persistiert.
Die manuelle Variante wäre, neben der B-Map noch eine Liste zu pflegen, die Bs enthält, aber keine BTupel. Das ist unbefriedigend, da ich 2 Collections synchron halten muss.
Ein Versuch war, einen "UserCollectionType" für die B-Map schreiben, dessen getElementsIterator-Methode einen Iterator über alle Bs zurückliefert, aber das funktioniert nicht, denn anschließend kann Hibernate meine Bs nicht mehr persistieren: beim Initialisieren über Spring gibts eine
org.hibernate.AnnotationException: Associated class not found: dings.test.B. Einen UserType für die Bs zu schreiben, denke ich bringt auch nix, denn ich muss ja bei manchen Bs mehrere Einträge generieren.
Eigentlich müsste ich doch nur beim Speichern eines Bs eingreifen: wenn es ein echtes B ist, wirds persistiert, wenn es ein BTupel ist, werden statt dessen die abhängigen Bs persistiert (also 2 Objekte statt einem). Wo kann ich mich da beim Persistieren einklinken? Oder funktioniert das ganz anders?
Dank im Voraus für irgendwelche Tipps,
Martin.