2 つのエンティティ/テーブルがあります。
1つは適切なエンティティです。それを と呼びましょうdata
。いわゆる「多言語コード」を含む多くのフィールドがあります。
2 番目のテーブル にcode
は、多言語の値自体が含まれています。
ここにいくつかのサンプルデータがあります:
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
次のように、データエンティティのプロパティの大陸、国などをマップとしてマップしたいと思います。
@OneToMany()
@MapKey(name="languageCode")
private Map<String, Code> continents;
そのため、次のように適切な言語のテキストを読むことができます。
Data toto = dao.findByName("Toto");
String text = toto.getContries.get("FR").getText(); //--> returns "Suisse"
String text = toto.getContries.get("EN").getText(); //--> returns "Switzerland"
また、ユーザーの言語を使用して、これらの「コード」の値をテキスト検索できるようにする必要もあります。(たとえば、フランス語で country='suisse' のすべてのデータを取得します!)
OneToMany
では、現在のエンティティの主キーではないキー フィールドを使用してコレクションをマップすることは可能ですか? 大陸コレクション「コード=私のcontinentCode
財産の値であるコードテーブルからのすべてのレコード」が必要です。それとも、この種の関係を表現するためのより適切な方法があるのでしょうか?
NB : 残念ながら、SQL スキーマを変更することはできません...