3

2 つのエンティティがあるとしますArticle。1 つは で、もう 1 つはFruitsです。これで、エンティティのすべての属性がエンティティArticleによって継承されますFruits

したがって、列を持つ Article テーブルがあるとしましょう。

ART_ID
ART_NAME
ART_COST

および列を持つ Fruit テーブル:

FRU_ID
FRU_FROZEN

Fruitここで、JPA コードで、オブジェクトを取得するときに、オブジェクトであるはずのすべてのデータを取得できるようにしたいと考えています。このデータは、テーブルArticleFruitテーブル ART_IDの両方からの情報で構成されています。ART_NAMEART_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", 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

あなたFruitsもすべてArticlesですか?クラス間に実際の一般化 (継承) 関係がある場合は、@Inheritance with join table 戦略を使用します。

に対してクエリを実行するだけでFruits、Hibernate がすべての魔法を実行します。

ところで、Articles テーブルに識別子列が必要な場合 (結合戦略と識別子の組み合わせ)。それを単一テーブル戦略でマップし、子クラスで @SecondaryTable を定義します。これが Hibernate のサポート方法です。

于 2012-04-28T15:43:23.080 に答える