【发布时间】:2012-01-24 10:25:17
【问题描述】:
我有两组表,继承如下:
Print
|
+-Magazine -+- ScientificMagazine
| |
| +- PopularMagazine
|
+-Book -+- EncyclopediaBook
|
+- ReligiousBook
以及对应的语言环境层次结构:
PrintLocale
|
+-MagazineLocale -+- ScientificMagazineLocale
| |
| +- PopularMagazineLocale
|
+-BookLocale -+- EncyclopediaBookLocale
|
+- ReligiousBookLocale
我正在尝试将 Prints 的类映射到相应的语言环境。
请注意,Locale 类是 {en, de, fr, es, cs} 的枚举 - 语言的缩写。
所以在 Print 类中,我有一个 EnumMap 来将相应的语言环境映射到 Print:
public class Print<T> {
...
@ElementCollection
@JoinTable (joinColumns = @JoinColumn (name="print_id"))
@MapKeyColumn (name="locale")
protected Map<Locale, T> locales = new EnumMap<Locale.class>();
...
我的问题是:
当我尝试映射继承的类(例如映射 ScientificMagazineLocale,它从其父类继承变量到 ScientificMagazine)时,我得到了 ArrayOutOfBoundException。如果我将 PrintLocale、MagazineLocale 的所有内容复制到 ScientificMagazineLocale 并删除继承,一切正常。
由于 PrintLocale 映射到 Print 类中,因此休眠总是尝试生成“print_locales”表而不是相应的表(popular_magazine_locale、science_magazine_locale、...),即使在 PopularMagazineLocale 中我定义了 @Table(name= “popular_magazine_locale”)。
【问题讨论】: