J'ai 2 tables:Comment mapper cette relation dans Hibernate?
La table Data
: id
, plus de nombreux champs. Certains de ces champs sont des «codes» qui font référence aux valeurs multilingues du tableau suivant, par exemple country_code
, continent_code
.
Le tableau Thesaurus
qui contient les codes multilingues, avec des colonnes: code
, code_type
, language
, text
. Le code est unique pour un code_type
mais il peut y avoir plusieurs fois le même code avec des valeurs différentes de 'code_type'.
Exemple de données de ce tableau:
code code_type language text
----------------------------------------------------
USA CNT EN United States
USA CNT FR Etats-Unis
FR CNT EN France
FR CNT FR France
FR LNG EN French
FR LNG FR Français
Ainsi, la colonne country_code
de la table de données peut contenir 'FR'
ou 'US'
, et la colonne language code
peut contenir 'FR'
aussi bien. Il est implicite que la colonne country_code
contient un code de type 'CNT'
pour le pays et la colonne language_code
contient un code de type 'LNG' pour la langue.
Comment puis-je mapper ce en veille prolongée afin que je puisse faire quelque chose comme ça dans mon code Java: (supposons que la configuration locale de l'application est l'anglais américain)
myData.getCountryCode(currentLocale.getlanguage()); --> returns 'France'
myData.getLanguageCode(currentLocale.getlanguage()); --> returns 'French'
Notez que je ne peux pas modifiez le schéma DB, que je n'ai pas conçu moi-même!
Merci pour la réponse. Je reçois le bit de mappage de classe abstraite + héritage. Cela semble être une bonne idée. Cependant, comment suggérez-vous de mapper la relation du côté de l'entité de données? en tant que un-à-plusieurs en utilisant la colonne language_code en tant que JoinColumn? Comment puis-je me retrouver avec une carte contenant les entités pour les différentes langues, avec le code de langue comme clé, comme dans notre exemple? –
OK, j'ai compris: j'utilise une carte pour la relation, et j'utilise l'annotation @MapKey pour spécifier que la langue doit être la clé de la carte. –