开发环境:IDEA,java8,MySQL
写代码的时候,看到大佬写的代码中有这个注解,查了一下,现将理解部分做个记录:
在开发项的过程中,总会为了代码重用率提高,架构更加完美,有时候需要对实体类进行提炼。比如:每个类都需要id,创建时间,更新时间,版本号等相关统一的属性,那么这个时候就可以建立一个父类,添加这些公共属性,使用这个注解来完成
侵删以下三个总结参考链接
使用环境:
1.@MappedSuperclass注解使用在父类上面,是用来标识父类的
2.@MappedSuperclass标识的类表示其不能映射到数据库表,因为其不是一个完整的实体类,但是它所拥有的属性能够隐射在其子类对用的数据库表中
3.@MappedSuperclass标识得嘞不能再有@Entity或@Table注解
自己尝试过程中使用的案例:
@MappedSuperclass
@Data
public abstract class AbstractEntity implements Entity {
@Id
@GeneratedValue
@Setter(AccessLevel.PROTECTED)
@Column(name = "id")
private Long id;
@Column(name = "create_time", nullable = false, updatable = false)
@Setter(AccessLevel.PRIVATE)
private Date createTime;
@Column(name = "update_time", nullable = false)
@Setter(AccessLevel.PRIVATE)
private Date updateTime;
@Version
@Column(name = "version", nullable = false)
@Setter(AccessLevel.PRIVATE)
private Integer version;
protected AbstractEntity(){
}
@Override
public Long getId() {
return this.id;
}
@Override
public void init() {
this.version = 1;
}
@Override
public int getVersion(){
return this.version;
}
@Override
public void validate(){
}
@PrePersist
public void prePersist(){
this.setCreateTime(new Date());
this.setUpdateTime(new Date());
}
@PreUpdate
public void preUpdate(){
this.setUpdateTime(new Date());
}
}
其它类直接继承这个父类就自动拥有这些属性,同时也会映射到数据库中,方便很多。
不当之处,多多指教,欢迎私信或者评论。