@MappedSuperclass注解

本文介绍如何使用JPA注解@MappedSuperclass来提高实体类代码的复用率,通过创建一个包含通用属性的父类,使得所有继承该父类的子类都能自动拥有这些属性并映射到数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发环境: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());
    }
}

其它类直接继承这个父类就自动拥有这些属性,同时也会映射到数据库中,方便很多。
不当之处,多多指教,欢迎私信或者评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八阿哥看招

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值