J'ai 2 entités/tables.Hibernate: le mapping OneToMany n'est pas basé sur PK?
On est une entité appropriée, appelons-le data
. Il contient un certain nombre de champs contenant des "codes multilingues".
La deuxième table, code
, contient les valeurs multilingues elles-mêmes.
Voici quelques exemples de données:
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
Je voudrais cartographier les propriétés continents, pays, etc dans l'entité de données comme une carte, comme ça:
@OneToMany()
@MapKey(name="languageCode")
private Map<String, Code> continents;
Alors que je peux alors lisez le texte pour la bonne langue comme ça:
Data toto = dao.findByName("Toto");
String text = toto.getContries.get("FR").getText(); //--> returns "Suisse"
String text = toto.getContries.get("EN").getText(); //--> returns "Switzerland"
Je dois aussi pouvoir faire du texte recherche sur les valeurs de ces "codes", en utilisant la langue de l'utilisateur. (par exemple, obtenir toutes les données où le pays = 'suisse', en français!)
Alors, est-il possible de mapper une collection OneToMany
en utilisant un champ clé qui n'est pas la clé primaire de l'entité actuelle? J'ai besoin de ma collection de continents "tous les enregistrements de la table de code où le code = la valeur de ma propriété continentCode
". Ou peut-être y a-t-il une façon plus appropriée de représenter ce genre de relation?
NB: Malheureusement, je ne peux pas changer le schéma SQL ...