何时在休眠状态中使用鉴别器值注释

2022-08-31 16:04:42

在休眠状态下使用鉴别器值注释的最佳方案是什么以及何时?


答案 1

这两个链接最能帮助我理解继承概念:

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 |
-----------------------

请参阅我上面发布的链接。


答案 2

让我用一个例子向你解释。假设你有一个名为动物的类,在动物类下有许多子类,如爬行动物,鸟......等。

在数据库中,您有表调用ANIMAL

---------------------------
ID||NAME      ||TYPE     ||
---------------------------
1 ||Crocodile ||REPTILE  ||
---------------------------
2 ||Dinosaur  ||REPTILE  ||
---------------------------
3 ||Lizard    ||REPTILE  || 
---------------------------
4 ||Owl       ||BIRD     ||
---------------------------
5 ||parrot    ||BIRD     ||
---------------------------

这里的列被称为鉴别器列,因为该列包含的数据清楚地将爬行动物和鸟类分开。数据和列中是鉴别器值。TYPEREPTILEBIRDTYPE

因此,在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 {

}

推荐