何时在休眠状态中使用鉴别器值注释
2022-08-31 16:04:42
在休眠状态下使用鉴别器值注释的最佳方案是什么以及何时?
这两个链接最能帮助我理解继承概念:
http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html
http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=6
要了解鉴别器,首先必须了解继承策略:SINGLE_TABLE、JOINED TABLE_PER_CLASS。
鉴别器通常用于SINGLE_TABLE继承,因为您需要一列来标识记录的类型。
示例:您有一个班级学生和 2 个子班级:好学生和坏学生。好和坏学生的数据都将存储在1个表中,但是我们当然需要知道类型,这就是(鉴别器列和)鉴别器值将进入的时间。
为学生班级添加注释
@Entity
@Table(name ="Student")
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING,
name = "Student_Type")
public class Student{
private int id;
private String name;
}
坏学生班
@Entity
@DiscriminatorValue("Bad Student")
public class BadStudent extends Student{
//code here
}
好学生班
@Entity
@DiscriminatorValue("Good Student")
public class GoodStudent extends Student{
//code here
}
因此,现在 Student 表将有一个名为 Student_Type 的列,并将学生的鉴别器值保存在其中。
-----------------------
id|Student_Type || Name |
--|---------------------|
1 |Good Student || Ravi |
2 |Bad Student || Sham |
-----------------------
请参阅我上面发布的链接。
让我用一个例子向你解释。假设你有一个名为动物的类,在动物类下有许多子类,如爬行动物,鸟......等。
在数据库中,您有表调用ANIMAL
---------------------------
ID||NAME ||TYPE ||
---------------------------
1 ||Crocodile ||REPTILE ||
---------------------------
2 ||Dinosaur ||REPTILE ||
---------------------------
3 ||Lizard ||REPTILE ||
---------------------------
4 ||Owl ||BIRD ||
---------------------------
5 ||parrot ||BIRD ||
---------------------------
这里的列被称为鉴别器列,因为该列包含的数据清楚地将爬行动物和鸟类分开。数据和列中是鉴别器值。TYPE
REPTILE
BIRD
TYPE
因此,在java部分中,此结构将如下所示:
动物类:
@Getter
@Setter
@Table(name = "ANIMAL")
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "TYPE")
public class Animal {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String name;
}
爬行动物类 :
@Entity
@DiscriminatorValue("REPTILE")
public class Reptile extends Animal {
}
鸟类类 :
@Entity
@DiscriminatorValue("BIRD")
public class Bird extends Animal {
}