2012-04-21 11 views
0

は、Animalクラスを継承しているHibernateの継承

牛や犬でこのシナリオを実装する手助けが必要、
牛と犬の両方持っている「子孫」リスト
牛は、追加のリストを持っている - 毎月のワクチン日付
このHibernateの表現は正しいでしょうか?
CowクラスにOneToMany Vaccineリストを入れることは正しいですか
またはAnimalクラスにする必要がありますか?
ありがとうございます!Hibernateのアノテーションの継承OneToMany Placemant

@Entity 
@Table(name = "animals") 
@DiscriminatorColumn(name="animal_type") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
public abstract class Animal{ 

@Id 
@Column(name = "animalId" ,nullable = false) 
private String animalId; 

@OneToMany(cascade=CascadeType.ALL) 
private List<Animal> offsprings = new ArrayList<Animal>(); 

public List<Animal> getOffsprings() { 
    return offsprings; 
} 

... 
} 

@Entity 
@DiscriminatorValue("COW") 
public class Coe extends Animal { 

@OneToMany(cascade=CascadeType.ALL) 
**private List<Vaccine> vaccine = new ArrayList<Vaccine>();** 

} 

@Entity 
@DiscriminatorValue("DOG") 
public class Dog extends Animal { 
    private chipId; 
} 

答えて

1

あなたの場合と同じように、牛のクラスに入れる必要があります。犬ではなく牛に固有のプロパティです。

ただし、どちらのエンティティも単一のテーブルに格納されます。これは、DB内には、犬にワクチン接種をさせないことは何もないことを意味します。

犬よりもむしろ牛に属しているワクチンのようなプロパティがある場合は、私の継承戦略を再考します。

+0

ドンキークラスにもワクチンが必要な場合、中間抽象クラスをAnimalと[Donkey、Cow]の間に入れて、ワクチンリストを保持するのは正しいですか? – user648026

+0

これは大丈夫です。私はまた、動物ではないので、中間クラスを抽象的にすることを選択します。したがって、それ自体でインスタンス化する必要はありません。 – verhage

関連する問題