JPA: Java Persistence API,JAVA持久化API。

Entity:JPA 中的Entity是一种可持久化的域对象。一个Entity类对应关系数据库中的一张表,一个Entity实例对应关系数据库中的表的一行记录。

在使用Entity的过程中,通常会存在一些公有字段,例如:插入时间更新时间版本等等,如果在每一个Entity都去声明这些字段,显的我们的代码不够简洁、清晰。这个时候了,我们就可以把这个公共字段做成一个父类,在父类中申明@MappedSuperclass,然后其他Entity去继续这个父类。

创建BaseEntity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.proliu.superclassdemo.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@MappedSuperclass
public class BaseEntity {

@Column(name = "CREATED_BY", length = 50)
private String createdBy;

@Column(name = "CREATE_DATE", updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;

@Column(name = "LAST_UPDATED_BY", length = 50)
private String lastUpdatedBy;

@Column(name = "LAST_UPDATED_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date lastUpdatedDate;

@Column(name = "VERSION")
@Version
private long version;
}

@Getter @Setter 来源于 lombok 工具。

创建Entity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.proliu.superclassdemo.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@Table(name="t_person")
public class Person extends BaseEntity {

@Id
@GeneratedValue
private long id;

private String name;

}

测试启动

通过配置自动创建DDL 来查看启动SQL,本测试使用MYSQL数据库:

1
2
3
Hibernate: create table hibernate_sequence (next_val bigint) engine=InnoDB
Hibernate: insert into hibernate_sequence values ( 1 )
Hibernate: create table t_person (id bigint not null, created_by varchar(50), create_date datetime(6), last_updated_by varchar(50), last_updated_date datetime(6), version bigint, name varchar(255), primary key (id)) engine=InnoDB

代码

以上传代码到GitHub, 可以通过GitHub superclass-demo 进行查看。