Java persistence api最早是EJB的一部分,在EJB3时候被分离出来JPA1.0,之后出现了JPA2.0、2.1。不同公司发布了Hibernate, Eclipselink, Toplink, Spring Data JPA等。
Generally, Java developers use lots of code, or use the proprietary framework to interact with the database, whereas using JPA, the burden of interacting with the database reduces significantly. It forms a bridge between object models (Java program) and relational models (database program).
JPA用来将业务逻辑和数据库的逻辑联系起来。简单说来,数据库包括的数据源和数据操作都可以采用java级别的code表现出来。
Database级别表示 | Java应用级别表示 | 描述 |
---|---|---|
Source data | Entity | 持久化对象 |
Read, Update, Delete | Query, EntityManager | 属于DAO层 |
Save | Persistence | 静态获取EntityManagerFactory的实例 |
Transaction | EntityManagerFactory, Entity transaction, | service层 |
现在问题来了,如果对象之间存在继承(Inheritance)关系,那是不是就必须要见不同的表呢?这时就需要在给父类加上继承策略(共有三种:SINGLE_TABLE、JOINED_TABLE、TABLE_PER_CONCRETE_CLASS)
用法如下:
@Inheritance( strategy = “你选择的继承策略”)
@Entity
@Table
@Inheritance( strategy = InheritanceType.TABLE_PER_CLASS )
public class Parent implements Serializable {
//
}
Child class
@Entity
@Table
public class Child extends Parent {
//
}
- Single Table strategy
所有的列都会存到同一张表里面; - Table per class strategy
这个很好理解,一张表对应一个class,有多少个child class就创建多少张表; - Joined table Strategy
创建parent和多张child class表,但是parent外键对应子表的主键。