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 进行查看。
Author:
Darren Du
License:
Copyright (c) 2019 MIT LICENSE