JPA继承关系详解(1)
2009-12-28 13:45
246 查看
这篇文章,考虑很多因素,有的地方比较详细,但配置这些并未涉及…
首先,我们需要了解为什么需要使用JPA继承关系!我们使用2简单的对象来阐述!学生,老师!
学生:姓名,年龄,性别,学习
老师:姓名,年龄,性别,教学
从上面2个类我们可以了解,学生与老师的3个属性是相同的,不同之处只有一处就是,学习与教学的区别!
传统方式在不使用继承关系的情况下,创建学生与老师的pojo需要这样…
Teacher.java
编写Junit4单元测试类:JPATest.java
执行:查看生成的数据库:
mysql> desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | UNI | NULL | |
| sex | varchar(5) | NO | | NULL | |
| study | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> desc teacher;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | UNI | NULL | |
| sex | varchar(5) | NO | | NULL | |
| teach | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
首先,我们需要了解为什么需要使用JPA继承关系!我们使用2简单的对象来阐述!学生,老师!
学生:姓名,年龄,性别,学习
老师:姓名,年龄,性别,教学
从上面2个类我们可以了解,学生与老师的3个属性是相同的,不同之处只有一处就是,学习与教学的区别!
传统方式在不使用继承关系的情况下,创建学生与老师的pojo需要这样…
package cn.vicky.test01; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Student implements Serializable { private static final long serialVersionUID = 1L; // parameter @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(length = 20, unique = true, nullable = false) private String name; @Enumerated(EnumType.STRING) @Column(length=5,nullable=false) private Sex sex = Sex.MAN; @Column(length = 20, nullable = false) private String study = "Java"; // getter & setter
Teacher.java
package cn.vicky.test01; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Teacher implements Serializable{ private static final long serialVersionUID = 1L; // parameter @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(length = 20, unique = true, nullable = false) private String name; @Enumerated(EnumType.STRING) @Column(length = 5, nullable = false) private Sex sex = Sex.MAN; @Column(length = 20, nullable = false) private String teach = "大学日语"; // getter & setter
编写Junit4单元测试类:JPATest.java
package cn.vicky.test01; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.apache.log4j.Logger; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; public class JPATest { private static final Logger logger = Logger.getLogger(JPATest.class.getName()); private static EntityManagerFactory factory; @BeforeClass public static void setUpBeforeClass() throws Exception { factory = Persistence.createEntityManagerFactory("vicky"); } @Test public void testInit(){ try { Assert.assertNotNull(factory); } catch (Exception e) { logger.error(e); } } @AfterClass public static void tearDownAfterClass() throws Exception { factory.close(); } }
执行:查看生成的数据库:
mysql> desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | UNI | NULL | |
| sex | varchar(5) | NO | | NULL | |
| study | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> desc teacher;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | UNI | NULL | |
| sex | varchar(5) | NO | | NULL | |
| teach | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
相关文章推荐
- JPA继承关系详解(2)
- JPA继承关系详解(3)
- C++/Java中继承关系引发的调用关系详解
- 传智播客jpa详解视频教程(七):JPA中的一对多双向关联与级联操作、延迟加载与关系维护
- EJB/JPA 继承详解(转)
- 继承关系映射详解
- Maven POM文件详解以及继承关系
- AngularJS的ng-repeat指令与scope继承关系实例详解
- 关于 TApplication 详解 一 ---- 继承关系
- Hibernate之jpa实体映射的三种继承关系
- SSH——Hibernate继承关系映射详解(配置+实例+总结)
- java 学习笔记——类之间的关系之封装、继承与多态的详解
- 在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class)、Joined策略(table per subclass)和Table_PER_Class策略。
- JAVAWEB开发之Hibernate详解(四)——持久化类的继承映射关系
- ES6学习——生成器(Generators):原型继承关系详解
- [轉]详解UML六大关系(依赖、类属(继承)、关联、实现、聚合和组合)
- 详解UML六大关系(依赖、类属(继承)、关联、实现、聚合和组合)
- tiny_cnn代码详解(3)——层间继承关系
- JAVAWEB开发之Hibernate详解(四)——持久化类的继承映射关系
- Python中类型关系和继承关系实例详解