Hallo,
ich hatte meine Frage letztes Jahr schon mal im Englischen Forum gestellt, aber keine Antwort bekommen.
Folgendes Problem besteht:
Es gibt ein Datenmodell, welches (vereinfacht) folgendermassen aussieht
table product
int id;
float preis;
table product_locale
int product_id;
int locale_id;
string product_name;
Die daten sind wie folgt hinterlegt:
insert into product ('1', '50,00');
insert into product_locale ('1', 'de', 'Auto');
insert into product_locale ('1', 'en', 'Car');
Zu einem Produkt ist der name in mehreren Sprachen hinterlegt.
Eine Abfrage mittels sql select funktioniert wunderbar zB.
select * from product_locale as a1 left join product as a2 on a1.product_id=a2.id where language_id='1';
Anforderung an das programm:
Gefordert: Ausgabe einer liste mit "lokalisierten" produkten.
Wie könnte denn ein sinnvolles mapping in hibernate aussehen, dass man "Produkt-Objekte" erhält:
class product
int id;
float preis;
int locale_id;
String product_name;
FolgendesMapping funktioniert NICHT:
Code:
<class name="Product" table="product_locale">
<composite-id>
<key-property name="product_id" type="int" column="product_id"/>
<key-property name="language_id" type="int" column="language_id"/>
</composite-id>
<property name="product_name" type="string"/>
<join table="product" inverse="true" >
<key column="id"/> <-- funzt nicht
<property name="preis" type="float"/>
</join>
</class>
Fehlermeldung: "Foreign key must have same number of columns as the referenced primary key"
Wie könnte hier ein sinnvolles mapping ausschauen?
Oder sollte man das Objektmodell ändern?
Die Tabellen und Daten kann ich nicht anpassen, das sind bestehende legacy modelle.
Hat jemand dazu eine Idee, oder einen Hinweis?
Vielen Dank!
PS: ich habe den gesamten text auswendig ohne "copy und paste" geschrieben, es können kleine logische fehler enthalten sein, aber das Grundproblem sollte erklärt sein