Hi,
Ich hoffe, es gibt einen Experten, der mir bei dem folgenden Problem helfen kann! :)
Ich habe 2 Domain Objekte, die ich mit Hibernate speichern möchte. Das eine ist ein Produkt, das andere eine Translation des Namens (mehrere Übersetzungen und Zusatzinformationen, daher als eigene Domain Klasse und nicht bspw. als String oder Map definiert)
Also hat das Produkt einen Namen - in der Datenbank ganz einfach über die name_id, in der Klasse über ein Objekt name vom Typ Translation referenziert. Soweit nicht sonderlich schwierig.
Jetzt verwende ich allerdings ein Messaging System, bei dem die Translations unabhängig von den Produkten geschickt werden können und mit meinem System synchronisiert werden müssen. Wenn der Name zuerst kommt, dann wird dieser problemlos abgespeichert. Das Produkt danach ebenfalls.
Problem: wird das Produkt zuerst geschickt, gibt es noch keinen abgespeicherten Namen. Ich möchte aber die Id des Namens schon speichern, da die Information sonst verloren geht. Setzen kann ich die Id im Produkt nicht, da ich eine Objektinstanz der Translation brauche. Wenn ich ein Objekt für die Translation initialisiere, dann bekomme ich beim Speichern folgende Meldung:
Code:
org.hibernate.PropertyValueException: not-null property references a null or transient value: ....
Setze ich den Namen auf nullable, dann wird das Produkt zwar gespeichert, die Referenz auf den Namen ist aber verloren gegangen.
Gibt es eine Möglichkeit, dass man die Checks auf Referenzielle Integrität ausschaltet und die Id dennoch speichert, auch wenn das dazu gehörende Objekt nicht verfügbar ist? Ich würde eigentlich nur ungerne direkt im Objekt die Id der Übersetzung speichern (also Attribut "name_id" anstelle von "name"), denn das Produkt hat nunmal einen Namen und keine Namens-Id.
Vielen Dank für Eure Hilfen. Ich kann mir nicht vorstellen, dass ich der erste bin, der bei Asynchronem Datenaustausch auf diese Probleme stößt, daher bin ich gespannt, ob man mit Hibernate Properties alleine schon irgendwas erreichen kann.
danke,
Guido
PS: ach so. Die Klassen sind in Groovy programmiert. Generell verwende ich in dem Projekt Grails.