【问题标题】:Hibernate annotation inheritance OneToMany PlacemantHibernate注解继承OneToMany Placemant
【发布时间】:2012-04-21 17:11:37
【问题描述】:

需要帮助在 Hibernate 继承中实现此场景

Cow 和 Dog 正在继承 Animal 类,
牛和狗都有“后代”名单
奶牛有额外的清单 - 每月疫苗日期
这种 Hibernate 表示是否正确?
将OneToMany疫苗列表放在Cow类上是否正确
还是需要上Animal类??
谢谢!

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

【问题讨论】:

    标签: java inheritance hibernate-annotations


    【解决方案1】:

    您需要将它放在牛类中,因为在您的情况下,它是特定于牛而不是狗的属性。

    但是,这两个实体都存储在一个表中。这意味着在 DB 内部,也没有什么可以阻止狗接种疫苗。

    如果你有更多的属性,比如疫苗,属于牛而不是狗,我会重新考虑我的继承策略。

    【讨论】:

    • 谢谢,如果驴类也需要疫苗,在Animal和[Donkey, Cow]之间放置中间抽象类来保存疫苗列表是否正确?
    • 没关系。我还选择使中间类抽象,因为它不是动物,因此永远不必自己实例化。
    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多