Hallo zusammen,
nach 6 Stunden recherche und Ausprobieren wende ich mich jetzt vertrauensvoll an euch.
Eigentlich ist die Anforderung sehr simple.
Es gibt eine User-Klasse
Code:
class User {
private Long id;
.... properties
}
und eine referenzierende Klasse
Code:
class Product {
private Long id;
... properties
private User creator;
}
Wenn eine Product-Klasse geladen wird, soll der User gleich gesetzt sein. Ich habe folgendes Mapping (eines von vielen) ausprobiert
Code:
<hibernate-mapping>
<class name="org.syracus.pimp.scrum.Product" table="PIMP_PRODUCTS"
dynamic-insert="false" dynamic-update="false" mutable="true"
optimistic-lock="version" polymorphism="implicit" select-before-update="false">
<id name="id" column="PRODUCT_ID">
<generator class="native"/>
</id>
<property name="name" column="PRODUCT_NAME"/>
<property name="description" column="PRODUCT_DESCRIPTION"/>
<many-to-one name="creator" not-null="false" cascade="delete-orphan">
<column not-null="false" name="CREATOR_ID"/>
</many-to-one>
</class>
</hibernate-mapping>
INSERT, UPDATE und SELECT für Product funktioniert einwandfrei. Nur leider macht mir der erstellte Foreign-Key (product.creator.id -> user.id) beim Löschen von User-Entitäten Probleme. Nach DB-Design ist es ja egtl korrekt, daß ich keinen User löschen können sollte wenn noch eine Referenz auf diesen besteht. Nur leider macht es in der Applikations-Logik keinen Sinn einen User nicht löschen zu dürfen, bloß weil es irgentwann mal ein Product angelegt hat.
Kann es sein, daß ich einfach das falsche Mapping verwende. Gibt es für das Problem überhaupt eine 'deklarative' Lösung im Mapping, oder habe ich hier nur die Möglichkeit das DB-Design manuell zu generieren und entsprechende Native ON DELETEs zu definieren ?
Was ich eben bräuchte wäre sowas wie ein 'loose' Binding von product.creator.id -> user.id.
Für Hilfe und Rat wäre ich echt dankbar.
Grüße
Sebastian