我正在尝试在Hibernate中映射Generic类型。我搜索过,找不到明确的答案如何做到这一点。将非常感谢帮助。 以下是一些示例类:
public class Person {
...
}
public class PersonA extends Person {
...
}
public class PersonB extends Person {
...
}
public class PersonHolder<P extends Person> {
private P person;
...
}
public class People {
private Map<String, PersonHolder<PersonA> > aPeople;
private Map<String, PersonHolder<PersonB> > bPeople;
...
}
我正在使用本机Hibernate映射(XML,没有注释)。我已经为Person,PersonA和PersonB提供了Hibernate映射,但我想知道是否可以以通用方式映射PersonHolder类的实例化,而无需显式创建泛型实现子类,如:
public class PersonAHolder extends PersonHolder<PersonA> {
...
}
(并将此类映射为普通类)。
谢谢!
答案 0 :(得分:1)
遗憾的是,AFAIK无法实现。在字节码中,由于类型擦除,PersonHolder<PersonA>
和PersonHolder<PersonB>
之间没有区别,因此Hibernate无法区分它们。
编辑:澄清一下,我在谈论PersonHolder
的直接实例。如果您有定义具体泛型类型的子类,则可以获取泛型类型信息。但这需要有子类,这与问题相矛盾:
我想知道是否可以通用方式映射PersonHolder类的实例化而不用显式创建泛型实现子类,例如: