我正在尝试在Hibernate中映射泛型类型。我已经搜索过,但是找不到明确的答案。帮助将不胜感激。
以下是一些示例类:
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> {
...
}
(并将此类映射为普通类)。
谢谢!
最佳答案
很抱歉,不可能使用AFAIK。在字节码中,由于类型擦除,PersonHolder<PersonA>
和PersonHolder<PersonB>
之间没有区别,因此Hibernate无法区分它们。
编辑:澄清一下,我说的是PersonHolder
的直接实例。如果您有定义具体泛型的子类,则可以获取泛型信息。但这需要具有子类,这与以下问题矛盾:
我想知道是否有可能以一种通用的方式映射类PersonHolder的实例,而无需显式创建诸如以下代码的通用实现子类: