您的位置:首页 > 其它

JPA继承关系详解(1)

2009-12-28 13:45 246 查看
这篇文章,考虑很多因素,有的地方比较详细,但配置这些并未涉及…

首先,我们需要了解为什么需要使用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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: