如何使用Hibernate映射Java通用实例

时间:2011-08-16 13:12:52

标签: java hibernate generics

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

遗憾的是,AFAIK无法实现。在字节码中,由于类型擦除,PersonHolder<PersonA>PersonHolder<PersonB>之间没有区别,因此Hibernate无法区分它们。

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

  

我想知道是否可以通用方式映射PersonH​​older类的实例化而不用显式创建泛型实现子类,例如: