Hibernate:从两个可能的地方查询实体的字段?

时间:2012-07-25 11:29:38

标签: java sql hibernate

是否可以从2个可能的表中获取实体的字段?

例如:

   @Entity
   @Table(name = "TABLE_A")
   public class A{

     @Id
     @Column(name = "ID")
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;
   }

   @Entity
   @Table(name = "TABLE_B")
   public class B{

     @Id
     @Column(name = "ID")
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;
   }

@Entity
@Table(name = "TABLE_PARENT")
public class PARENT{

  // This field needs to be fetched from A table or from B table!!! by some
  // conditions
  @OneToOne
  @JoinColumn(name = "A_B_ID")
  private A a;                     
}

需要从table_A或table_b中获取Parent类中的字段 根据某些条件!

任何想法都将受到赞赏!

澄清:如果父实际上指向B实例我不想取 B的实例!每个类继承的表只在A的表中查找,因为我们在Parent类中指定了他的A类型字段!?

你有其他想法吗?

2 个答案:

答案 0 :(得分:1)

你可以通过使用hibernate继承功能来实现这一点; 这是一个例子; http://viralpatel.net/blogs/hibernate-inheritance-table-per-concrete-class-annotation-xml-mapping/

答案 1 :(得分:1)

一个解决方案是从公共类继承AB,例如C,并在C类中引用Parent。草案可以是:

@MappedSuperclass
public class AB {
    @Id
    private Integer id;
...
}

@Entity
public class A extends AB {
...
}

@Entity
public class B extends AB {
...
}

@Entity
public class Parent {
    ...
    @Id
    private Integer id;
    @OneToOne
    private AB ab;
}

documentation section 2.2.4.1