hibernate-继承映射-15(不太重要)

来源:互联网 发布:网络空间用什么来描绘 编辑:程序博客网 时间:2024/05/17 01:39

三种方式(根据具体情况看,第一种和第三种稍多,第二种较少):
1. sigleTable(一张表)
2. tablePerClass(一个类一张表)
3. joined(一个主表存id和共有的字段等,其他的表存id和各子类特定的字段)

Peson、Student、Teacher的继承映射

第一种

@Entity@Inheritance(strategy = InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name="discriminator",discriminatorType = DiscriminatorType.STRING)@DiscriminatorValue("person")public class Person {    private int id;    private String name;    @Id    @GeneratedValue    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}
@Entity@DiscriminatorValue("student")public class Student extends Person {    private int score;    public int getScore() {        return score;    }    public void setScore(int score) {        this.score = score;    }}
@Entity@DiscriminatorValue("teacher")public class Teacher extends Person {    private String title;    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }}

第二种(每个类一张表,且每张表的id不能重复(对mysql来说,主键生成策略就只能设成table))

第二种用起来也比较麻烦

第三种

比较方便,但多态load的时候要每张表查再union,和第二种差不多
父类中,写共有的字段和id
子类中,写自己扩展的字段和id,字表的id参考父类id
在父类中,写annotation即可

@Inheritance(strategy = InheritanceType.JOINED)
原创粉丝点击