3

假设您有两个实体,一个Article是 ,另一个是Fruits。现在实体的所有属性都被实体Article继承了Fruits

所以,假设我有带有列的文章表:

ART_ID
ART_NAME
ART_COST

和带有列的水果表:

FRU_ID
FRU_FROZEN

现在我想在我的 JPA 代码中实现,当检索Fruit对象时,我检索应该是它们的所有数据,这些数据包含来自我ArticleFruit表的信息 - ART_ID, ART_NAME, ART_COST, FRU_ID, FRU_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", column=@Column(name="ART_NAME")),
@AttributeOverride(name="cost", column=@Column(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;

    //...
}

谢谢!

4

1 回答 1

1

都是你FruitsArticle吗?如果类之间存在真正的泛化(继承)关系,请使用 @Inheritance with join table 策略。

你可以只查询Fruits,Hibernate 会做所有的事情。

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

于 2012-04-28T15:43:23.080 回答