数据库规范

  • 每张表必须有主键id字段,和create_user_id/create_time/update_user_id/update_time/deleted/id这些字段。
    • 其中create_user_id/create_time/update_user_id/update_time标识创建人/创建时间,修改人/修改时间
    • deleted标识数据已被删除
    • id标识主键
    • 有些场景下可能还需要account_id
    • 特殊情况,如中间表,可以没有id字段,但一定要有主键字段

在jpa实体中,以前是这样的,

@MappedSuperclass
@Data
public abstract class JpaBasePersist<I extends Serializable> implements Serializable {
}

@EqualsAndHashCode(callSuper = true)
@MappedSuperclass
@Data
public abstract class JpaIdBasePersist<I extends Serializable> extends JpaBasePersist<I> {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private I id;
}

@EqualsAndHashCode(callSuper = true)
@MappedSuperclass
@Data
public abstract class JpaLongIdBasePersist extends JpaIdBasePersist<Long> {
}

@EqualsAndHashCode(callSuper = true)
@MappedSuperclass
@Data
public class JpaCrudLongIdBasePersist extends JpaLongIdBasePersist {

    @Column(name = "create_time", insertable = false, updatable = false)
//    @Temporal(TemporalType.TIMESTAMP)
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @Column(name = "update_time", insertable = false, updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @Column(name = "create_user_id", nullable = false, updatable = false)
    private Long createUserId;
    @Column(name = "update_user_id", nullable = false)
    private Long updateUserId;
}

属于过度设计了,可以优化成一个JpaCrudLongIdBasePersist类,就够用了。

作者:张三  创建时间:2025-07-06 21:12
最后编辑:张三  更新时间:2026-06-09 12:07
上一篇:
下一篇: