JPA中的继承 - 如何访问子类值?

时间:2012-04-02 10:46:52

标签: java inheritance jpa

我有以下课程

class A {
private int field1;
private int field2;
private int field3;
private int field4;
}


Class B extends A {

private int field3;
private int field4;

}

 Class C extends A {
  private int field3;
  private int field4;
  }

基于A类的“field1”值,我需要访问B类字段或C类字段并设置父字段的值。

我正在使用orm映射xml for JPA。 A类表及其子类映射到不同的表,因此我将继承策略指定为JOINED。

我需要在POST-LOAD上转换A类中的字段,还需要设置A.“field3”和A.“field4”值,因此我指定了实体列表。

JPA查询在这些A,B,C的三个表和所有三个类的retreive值之间创建连接。

但是在加载后我只得到父类A.

我的问题是:如何访问B类和C类字段值?这样我就可以设置父字段值。

2 个答案:

答案 0 :(得分:0)

从你的问题:

  

JPA查询在这些A,B,C的三个表和所有三个类的retreive值之间创建连接。

所以创建三个不同的类A,B和C,不要像你提供的那样继承。使用join将三个表检索到三个对象A,B和C. 现在你有三个对象a,b和c。现在检查a.field1的值并访问您的对象b或c。

答案 1 :(得分:0)

制作摘要。然后你可以 的实例来知道它是哪种类型并将其转换为该类型:

if (a instance of B) {
      B b = (B) a;
} else if (a instance of C) {
      C c = (C) a;
}