2012-07-25 46 views
0

是否可以從2個可能的表中獲取實體的字段?Hibernate:從兩個可能的地方查詢實體的字段?

例如:

@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;      
} 

在父類中的字段需要從表-A表-B或 根據一些條件中獲取!

任何想法將不勝感激!

說明:如果父實際指向B實例我不想取B的實例 !因爲我們在Parent類中指定了字段A的類型!?每類繼承的表只能在A的表中查找

您有其他想法嗎?

+0

你會如何設置類B'的'對象到該屬性? – 2012-07-25 11:33:46

回答

1

你可以通過使用hibernate繼承功能來實現這一點; 這裏是一個例子; http://viralpatel.net/blogs/hibernate-inheritance-table-per-concrete-class-annotation-xml-mapping/

+0

但是,如果我使用每班的表,我會永遠得到PARENT類一個實例!因爲當使用每個類的表時,我們需要指定對象的類型以便在他的表中查找他!我需要的是,如果PARENT中的ID指向A對象,那麼他實際上是B型在B表中尋找他的! – 2012-07-25 12:44:53

1

一種解決方案是從一個共同的類被繼承AB,例如CParent類參考C。草案可能是:

@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