У меня есть два набора таблиц, унаследованных следующим образом:
Print
|
+-Magazine -+- ScientificMagazine
| |
| +- PopularMagazine
|
+-Book -+- EncyclopediaBook
|
+- ReligiousBook
И соответствующая иерархия локалей:
PrintLocale
|
+-MagazineLocale -+- ScientificMagazineLocale
| |
| +- PopularMagazineLocale
|
+-BookLocale -+- EncyclopediaBookLocale
|
+- ReligiousBookLocale
Я пытаюсь сопоставить классы Prints ссоответствующие Locales.
Обратите внимание, что класс Locale - это перечисление {en, de, fr, es, cs} - сокращений языков.
Так что в классе Print у меня есть EnumMap длясопоставить соответствующие Locales для Print:
public class Print<T> {
...
@ElementCollection
@JoinTable (joinColumns = @JoinColumn (name="print_id"))
@MapKeyColumn (name="locale")
protected Map<Locale, T> locales = new EnumMap<Locale.class>();
...
Мои проблемы:
Когда я пытаюсь отобразить унаследованные классы (например, Mapping ScientificMagazineLocale, которые наследуют переменные из егородители в ScientificMagazine), я получаю ArrayOutOfBoundException.Если я копирую все содержимое PrintLocale, MagazineLocale в ScientificMagazineLocale и удаляю наследство, все работает правильно.
Поскольку PrintLocale отображается в классе Print, гиберны всегда пытаются сгенерировать "print_locales"таблица вместо соответствующих таблиц (Popular_magazine_locale, Scientific_magazine_locale, ...), хотя в PopularMagazineLocale я определяю @Table (name =" Popular_magazine_locale ").