У меня есть 2 объекта/таблицы.Hibernate: отображение OneToMany не основано на PK?
Один из них является надлежащим носителем, назовем его data
. Он содержит несколько полей, содержащих так называемые «многоязычные коды».
Вторая таблица, 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"
Мне также нужно иметь возможность сделать текст найдите значения этих «кодов», используя язык пользователя. (например, получить все данные, в которых страна = 'suisse', по-французски!)
Итак, можно ли сопоставить коллекцию OneToMany
, используя поле ключа, которое не является первичным ключом текущего объекта? Мне нужна моя коллекция континентов «все записи из таблицы Code, где code = значение моего свойства continentCode
». Или, может быть, есть более подходящий способ представления такого рода отношений?
NB: К сожалению, я не могу изменить схему SQL ...