我正在尝试在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映射,但是我想知道是否有可能以一种通用的方式来映射PersonH​​older的实例化类,而无需显式创建诸如以下的通用实现子类:

public class PersonAHolder extends PersonHolder<PersonA> {
  ...
}


(并将此类映射为普通类)。

谢谢!

最佳答案

很抱歉,不可能使用AFAIK。在字节码中,由于类型擦除,PersonHolder<PersonA>PersonHolder<PersonB>之间没有区别,因此Hibernate无法区分它们。

编辑:澄清一下,我说的是PersonHolder的直接实例。如果您有定义具体泛型的子类,则可以获取泛型信息。但这需要具有子类,这与以下问题矛盾:


  我想知道是否有可能以一种通用的方式映射类PersonH​​older的实例,而无需显式创建诸如以下代码的通用实现子类:

09-11 19:54