一、前言
由于项目中的 实体(entity)默认都是继承一个父类(包含一些公共的属性,比如创建时间,修改时间,是否删除,主键id)。为了实现逻辑删除,一般会自己实现RepositoryFactoryBean 和 Repository。但是由于多个团队开发的结果,表的结构没有同一,也就是会出现有的表没有基础父类对应的字段,这样就会导致自定义的jpa repository操作这些表就会出错。
二、最开始实现
默认父类
import java.io.Serializable; import java.sql.Timestamp; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.MappedSuperclass; import org.hibernate.annotations.GenericGenerator; @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static final long serialVersionUID = 7988377299341530426L; @Id @GenericGenerator(name="uuid", strategy="uuid") @GeneratedValue(generator="uuid") @Column(name="id") protected String id; @Column(name = "creationtime") protected Timestamp creationTimestamp = new Timestamp(System.currentTimeMillis()); @Column(name = "lastmodifiedtime") protected Timestamp modificationTimestamp = new Timestamp(System.currentTimeMillis()); @Column(name = "dr") protected int dr;// 是否删除。0:未删除;1:已删除 /** * 主键,对应id字段 */ public String getId() { return id; } public void setId(String id) { this.id = id; } /** * 创建日期,对应ts_insert字段 */ public Timestamp getCreationTimestamp() { return creationTimestamp; } public void setCreationTimestamp(Timestamp creationTimestamp) { this.creationTimestamp = creationTimestamp; } /** * 修改日期,对应ts_update字段 */ public Timestamp getModificationTimestamp() { return modificationTimestamp; } public void setModificationTimestamp(Timestamp modificationTimestamp) { this.modificationTimestamp = modificationTimestamp; } /** * 是否删除,对应dr字段 * @return */ public int getDr() { return dr; } public void setDr(int dr) { this.dr = dr; } }