习惯,也能够符合关系数 据库设计的范式要求,而且数据库中的数据冗余最小。TABLE_PER_CLASS 和 SINGLE_TABLE 方式下的对象继承关系持久化的例子请读者参考下面的步骤自己完 成。
实体类 Animal
首先我们创建实体类 Animal,它是 Fish 和 Dog 的父类。因此必须为它处理 提供 javax.persistence.Inheritance 注释。我们选择使用 JOINED 策略处理继 承关系,因此设置 javax.persistence.Inheritance 注释的 strategy 属性为 InheritanceType.JOINED。
清单 1 Animal.java, 继承关系的父类
1. package chapter04.entity;
2. import javax.persistence.Entity;
3. import javax.persistence.Id;
4. import javax.persistence.Inheritance;
5. import javax.persistence.InheritanceType;
6.
7. @Entity
8. @Inheritance(strategy = InheritanceType.JOINED)
9. public class Animal {
10. @Id
11. private int id;
12.
13. private String name;
14.
15. public Animal() {
16. }
17.
18. public Animal(int id, String name) {
19. this.id = id;
20. this.name = name;
21. }
22.
23. public int getId() {
24. return id;
25. }
26.
27. public void setId(int id) {
28. this.id = id;
29. }
30.
31. public String getName() {
32. return name;
33. }
34.
35. public void setName(String name) {
36. this.name = name;
37. }
38.
39. }
使用Apache OpenJPA开发EJB 3.0应用,第3部分: 实体继承(5)
时间:2011-08-31 IBM 肖菁
实体类 Fish
实体类 Fish 是 Animal 的子类,因此它必须继承自 Animal。同时根据 OpenJPA 的要求,每一个实体必须使用 javax.persistence.Entity 进行注释, 因此在 Fish 类声明之前提供 javax.persistence.Entity 注释。
清单 2 Fish.java, 继承关系中的子类
1. package chapter04.entity;
2.
3. import javax.persistence.Entity;
4.
5. @Entity
6. public class Fish extends Animal {
7. /* 鱼的活动范围,比如江、河、湖、海 */
8. private String territory;
9.
10. public Fish() {
11. }
12.
13. public Fish(int id, String name, String territory) {
14. super(id, name);
15. this.territory = territory;
16. }
17.
18. public String getTerritory() {
19. return territory;
20. }
21.
22. public void setTerritory(String territory) {
23. this.territory = territory;
24. }
25.
26. }
实体类 Dog
实体类 Dog 是 Animal 的子类,因此它必须继承自 Animal。和 Fish 类一样 ,我们需要在 Dog 类声明之前提供 javax.persistence.Entity 注释。
清单 3 Dog.java, 继承关系中的子类
1. package chapter04.entity;
2.
3. import javax.persistence.Entity;
4.
5. @Entity
6. public class Dog extends Animal {
7. /* 性别 */
8. private String sex;
9.
10. public Dog() {
11. }
12.
13. public Dog(int id, String name, String sex) {
14. super(id, name);
15. this.sex = sex;
16. }
17.
18. public String getSex() {
19. return sex;
20. }
21.
22. public void setSex(String sex) {
23. this.sex = sex;
24. }
25.
26. }
使用Apache OpenJPA开发EJB 3.0应用,第3部分: 实体继承(6)
时间:2011-08-31 IBM 肖菁
创建合适的数据库表
我们可以使用下面的语句创建数据库表:
CREATE TABLE ANIMAL(ID INTEGER NOT NULL PRI
|