2 Stimmen

Hibernate : OneToMany-Mapping basiert nicht auf PK?

Ich habe 2 Entitäten/Tabellen.

Eine ist eine eigene Einheit, nennen wir sie data . Sie enthält eine Reihe von Feldern mit sogenannten "mehrsprachigen Codes".

Die zweite Tabelle, code enthält die mehrsprachigen Werte selbst.

Hier sind einige Beispieldaten:

Data table
id  name         continentCode  countryCode 
------------------------------------
1   Toto         EU             CH
2   Titi         AS             CN

Code table
id  code   language  text
----------------------------
1   EU     EN        Europe
2   EU     FR        Europe
3   EU     DE        Europa
4   CH     EN        Switzerland
5   CH     FR        Suisse
6   CH     DE        Schweiz
... etc

Ich möchte die Eigenschaften Kontinente, Länder usw. in der Datenentität als Karte abbilden, wie das:

@OneToMany()
@MapKey(name="languageCode")
private Map<String, Code> continents;

Damit ich dann den Text für die richtige Sprache so lesen kann:

Data toto = dao.findByName("Toto");
String text = toto.getContries.get("FR").getText(); //--> returns "Suisse"
String text = toto.getContries.get("EN").getText(); //--> returns "Switzerland"

Ich muss auch in der Lage sein, eine Textsuche nach den Werten dieser "Codes" durchzuführen, und zwar in der Sprache des Benutzers. (z.B. alle Daten, bei denen das Land='suisse' ist, auf Französisch!)

Ist es also möglich, eine OneToMany Sammlung mit einem Schlüsselfeld, das nicht der Primärschlüssel der aktuellen Entität ist? Ich brauche meine Kontinente Sammlung "alle Datensätze aus der Tabelle Code, wo der Code = der Wert von meinem continentCode Eigenschaft". Oder gibt es vielleicht einen geeigneteren Weg, um diese Art von Beziehung darzustellen?

NB: Leider kann ich das SQL-Schema nicht ändern...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X