编写符合要求的持久化类
根据模拟场景的需求,结合我们前面学习到的描述实体之间一对一关联关系的知识,我们可以采用如下设计:
1. Book 类和 BookExtend 之间存在一对一关联关系;
2. Book、BookExtend 对应的表的主键字段由 MySQL 自动生成;
3. Book 表中参与关联关系的字段名为“beID”;
4. BookExtend 表中参与关联关系的字段使用默认字段“ID”;
5. Book 类和 BookExtend 类之间存在全部级联关系;
6. 不是每一个 Book 对象都需要有对应的 BookExtend 对象。
根据这样的设计,我们可以开始编写实体 Book 和 BookExtend 对应的持久化类代码,下面是作者编写的两个实体类的全部代码,大家可以参考代码中加入的大量注释学习如何使用注释来描述实体和实体之间的一对一关联关系。
Book 类
| 1. package org.vivianj.openjpa.beans; 2. 3. import javax.persistence.Basic; 4. import javax.persistence.CascadeType; 5. import javax.persistence.Column; 6. import javax.persistence.Entity; 7. import javax.persistence.GeneratedValue; 8. import javax.persistence.GenerationType; 9. import javax.persistence.Id; 10. import javax.persistence.Inheritance; 11. import javax.persistence.InheritanceType; 12. import javax.persistence.JoinColumn; 13. import javax.persistence.OneToOne; 14. 15. /** 16. * Book 用于表征系统中的书籍对象,它有三个属性 id - 书籍编号, * 书籍编号将由 MySQL 数据库自动生成 name - 书名 bookExtend – 17. * 书的扩展信息,和 BookExtend 是一对一(OneToOne)关系 18. */ 19. 20. @Entity(name = "Book") 21. public class Book { 22. /* Id 注释表示该字段是标识字段 */ 23. @Id 24. /* 25. * GeneratedValue 注释定义了该标识字段的产生方式,我们的演示系统中 26. * id 由 MySQL 数据库字段自动生成,因此选择 GenerationType.IDENTITY 27. */ 28. @GeneratedValue(strategy = GenerationType.IDENTITY) 29. /* 30. * Column 注释的 name 属性定义了该类属性对应的数据字段的名称, * 为了最大限度保持系统和数据库之前的独立性,建议使用大写字符 31. */ 32. @Column(name = "ID") 33. public int id; 34. 35. /* Basic 注释表示该属性是基本属性 */ 36. @Basic 37. /* 38. * Column 注释的 name 属性定义了该类属性对应的数据字段的名称, * 为了最大限度保持系统和数据库之前的独立性,建议使用大写字符 39. */ 40. @Column(name = "NAME") 41. public String name = null; 42. 43. /* 44. * 使用 OneToOne 注释表示该属性和 Book 类形成一对一关系,OneToOne 45. * 注释的 option 属性设为 True 表示该对象可以不存在,cascade 属性 46. * 设置为 CascadeType.ALL,表示 Book 和 BookExtend 对象级联新建、 更新、删除、刷新 47. */ 48. @OneToOne(optional = true, cascade = CascadeType.ALL) 49. /* 使用 JoinColumn 注释设置两个对象对应数据库表之间的关联字段 */ 50. @JoinColumn(name = "extendID") 51. public BookExtend bookExtend; 52. } |
BookExtend 类
|
1. package org.vivianj.openjpa.beans; 16. @Entity |

