关于jpa新学到的一些注解使用

@Inheritance

继承映射在 Annotation 中使用 @Inheritance 注解,并且需要使用 strategy 属性指定继承策略,继承策略有 SINGLE_TABLE、TABLE_PER_CLASS 和 JOINED 三种

  1. SINGLE_TABLE
    SINGLE_TABLE 是将父类和其所有的子类集合在一块,存在一张表中,并创建一个新的字段来判断对象的类型。
    @Inheritance 的 strategy 属性是指定继承关系的生成策略,@DiscriminatorColumn 注解作用是指定生成的新的判断对象类型的字段的名称和类型,@DiscriminatorValue 注解是确定此类(Person)的标示,即 DiscriminatorColumn 的值。
  2. TABLE_PER_CLASS是为每一个类创建一个表,这些表是相互独立的。
  3. JOINED
    JOINED 是将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系。

@MappedSuperclass

通过这个注解,我们可以将该实体类当成基类实体,它不会隐射到数据库表,但继承它的子类实体在隐射时会自动扫描该基类实体的隐射属性,添加到子类实体的对应数据库表中。

使用环境:
  1. @MappedSuperclass注解使用在父类上面,是用来标识父类的
  2. @MappedSuperclass标识的类表示其不能映射到数据库表,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库表中
  3. @MappedSuperclass标识的类不能再有@Entity或@Table注解

@PrePersist

在持久化之前自动填充实体属性。 可以用来在使用jpa的时记录一些业务无关的字段,比如最后更新时间等等。 生命周期方法注解

@PrePersist
protected void prePersist() {
    if (this.createdTime == null) {
        createdTime = new Date();
    }
    if (this.lastModifiedTime == null) {
        lastModifiedTime = new Date();
    }
}

@PreUpdate

用于为相应的生命周期事件指定回调方法。 该注释可以应用于实体类,映射超类或回调监听器类的方法。 用于setter 如果要每次更新实体时更新实体的属性,可以使用@PreUpdate注释。 使用该注释,您不必在每次更新用户实体时显式更新相应的属性。

@PreUpdate
protected void preUpdate() {
    this.lastModifiedTime = new Date();
}

@PreRemove

事件在实体从数据库删除之前触发,即调用了 EntityManager.remove()方法或者级联删除

@PreRemove
protected void preRemove() {
    this.lastModifiedTime = new Date();
}

@SQLDelete

同理,还有@SQLInsert,@SQLUpdate

调用delete方法的时候,hibernate将自动执行该语句将实现删除,通常用于逻辑删除。

@Entity
@Table(name = "User")
@SQLDelete(sql = "Update User set isDeleted = 1 where id = ?")
@Where(clause = "isDeleted = 0")
public class User {
    ...
}

@Where

频繁的用到的where条件,可以减少繁琐的工作量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值