2012-04-28 92 views
3

假设您有两个实体,一个为Article,另一个为Fruits。现在实体Article的所有属性都由实体Fruits继承。如何连接表并拥有其中每一个的所有属性?

因此,可以说,我有列第表:

ART_ID 
ART_NAME 
ART_COST 

和水果表列:

FRU_ID 
FRU_FROZEN 

现在,我想有可能在我的JPA的代码,当检索Fruit对象我检索所有应该是它们的数据,这些数据由我的ArticleFruit表中的信息组成 - ART_ID,ART_NAME,ART_COSTFRU_IDFRU_FROZEN

这是可能的JPA?我应该使用@Inheritance@JoinColumn还是什么?如果需要可以提供代码。


*编辑*

我的结论是,下面的代码会适合我的需要:

@Entity 
@Table(name = "Article") 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class Article { 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    @Basic(optional = false) 
    @Column(name = "ART_ID") 
    private Long id; 

    @Basic(optional = false) 
    @Column(name = "ART_NAME") 
    private String name; 

    @Basic(optional = true) 
    @Column(name = "ART_COST") 
    private String cost; 

    // ... 
} 

@Entity 
@Table(name="Fruits") 
@AttributeOverrides({ 
@AttributeOverride(name="name", [email protected](name="ART_NAME")), 
@AttributeOverride(name="cost", [email protected](name="ART_COST")), 
}) 
public class Fruits extends Article { 

    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    @Basic(optional = false) 
    @Column(name = "FRU_ID") 
    private Long fruitID; 

    @Column(name="FRU_FROZEN") 
    private String fruFrozen; 

    //... 
} 

谢谢!

+0

你的内容在数据库级别有什么关系?关联表?外键关系? – Perception 2012-04-28 15:48:43

+0

外键关系。 :) – 2012-04-28 15:52:07

回答

1

是你所有的FruitsArticle s?如果类之间存在真正的泛化(继承)关系,请使用@Inheritance和join表策略。

你可以在Fruits上查询,而Hibernate可以完成所有的功能。

顺便说一句,如果你想在Article的表中有一个鉴别器列(连接策略与鉴别器的组合)。使用单表策略映射它,并在子类中定义@SecondaryTable,这就是Hibernate如何支持它。

+0

好吧,为了指出我,我会用建议的奖励这个答案。 – 2012-04-28 17:53:13

相关问题