Hallo,
ich möchte gern ein Collection-Mapping definieren und komme einfach auf keinen grünen Ast.
Quelle ist ein Objekt namens Category das ein paar Labels enthält. Wichtig daran ist, das ein Label immer nur zu einer Category gehöht, ein Label immer eine Sprache hat (en, de etc.) und pro Category das Label über die Sprache eindeutig identifiziert ist.
Category:
Code:
Map<String, Label> getLabels()
liefert eine Map von allen Labels mit der Sprache aus Label als Schlüssel der Map. Label besitzt "lang", "text" und "description" als Felder mit entsprechenden Gettern und Settern.
Beim definieren des Mapping bekomme ich einfach keinen DDL-Output, wie er logisch gesehen sein sollte:
Code:
create table Labels (category integer not null, lang varchar(255), text varchar(255), description varchar(255), primary key (category, lang))
Stattdessen wird "category, lang, text, description" als Primärschlüssel verwendet, was unter MySQL zu zu großen Schlüssel führt und unter DB2 gar nicht funktioniert, weil Teile des Schlüssels NULL werden können
Code:
<map name="labels" cascade="all" table="Labels">
<key>
<column name="category"/>
</key>
<map-key type="string" formula="lang"/>
<composite-element class="Label">
<property name="lang" not-null="true"/>
<property name="text" />
<property name="description" not-null="false"/>
</composite-element>
</map>
Ich habe das auch schon mit einem one-to-many Mapping nach Label probiert, wie in Abschnitt
"6.2.5. One-to-many associations" vorgeschlagen. Das funktioniert aber nicht, weil Label ein schwaches Entity ist, das ohne zugehöriges "starkes" Entity nicht existieren kann, weswegen Label keinen Schlüssel hat.
Wie muss so ein Mapping aussehen, damit "category, lang" der Primärschlüssel wird?
Danke im voraus.
Thomas