cze*_*uya 42 java persistence hibernate jpa
什么时候在hibernate中使用DiscriminatorValue注释的最佳方案是什么?
cze*_*uya 47
这两个链接帮助我最了解继承概念:
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.
Discriminator通常用于SINGLE_TABLE继承,因为您需要一列来标识记录的类型.
示例:您有一个Student类和2个子类:GoodStudent和BadStudent.Good和BadStudent数据都将存储在1个表中,但当然我们需要知道DiscriminatorColumn进入时的类型和类型.请参阅我上面发布的链接.
Job*_*ews 38
让我用一个例子来解释你.假设你有一个名为Animal的类,在Animal类下有许多子类,如Reptile,Bird ......等.
在数据库中,你有一个名为的表 ANIMAL
---------------------------
ID||NAME ||TYPE ||
---------------------------
1 ||Crocodile ||REPTILE ||
---------------------------
2 ||Dinosaur ||REPTILE ||
---------------------------
3 ||Lizard ||REPTILE ||
---------------------------
4 ||Owl ||BIRD ||
---------------------------
5 ||parrot ||BIRD ||
---------------------------
Run Code Online (Sandbox Code Playgroud)
此列TYPE称为DiscriminatorColumn,因为此列包含明确区分爬行动物和鸟类的数据.数据REPTILE和BIRD列TYPE中的DiscriminatorValue.
所以在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;
}
Run Code Online (Sandbox Code Playgroud)
爬行类:
@Entity
@DiscriminatorValue("REPTILE")
public class Reptile extends Animal {
}
Run Code Online (Sandbox Code Playgroud)
鸟类:
@Entity
@DiscriminatorValue("BIRD")
public class Bird extends Animal {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55350 次 |
| 最近记录: |