Hibernate JPA-@PreUpdate 和@PrePersist、@MappedSuperclass应用场景

@PrePersist注解 和 @PreUpdate注解

@PrePersist注解 和 @PreUpdate注,用于为相应的生命周期时间指定回调方法。可以用来在使用jpa的时记录一些业务无关的字段,比如最后更新时间等等

注: 只能用来注解方法(且无返回 无参数) ,不能用于注解属性。

@PreUpdate

用于为相应的生命周期事件指定回调方法。

如果要每次更新实体时更新实体的属性,可以使用@PreUpdate注释。
使用该注释,您不必在每次更新用户实体时显式更新相应的属性。

@PrePersist

可帮助我们在持久化之前自动填充实体属性。

可以用来在使用jpa的时记录一些业务无关的字段,比如最后更新时间等等。

应用场景

给一张表加上create_time,update_time这样的字段,想实现自动保存,更新这两个字段

思路:在我们的实体类中,直接继承BaseEntity,包含了id,createTime,modifyTime,数据库字段对应好即可。

@MappedSuperclass

直译就是映射父类,就是用来标识父类实体类。

基于代码的可复用性,抽象化思想,在项目开发中使用JPA的@MappedSuperclass注解将实体类的多个属性分别封装到不同的非实体类中。

在Jpa里, 当我们在定义多个实体类时, 可能会遇到这几个实体类都有几个共同的属性, 这时就会出现很多重复代码.
这时我们可以选择编写一个父类,将这些共同属性放到这个父类中, 并且在父类上加上@MappedSuperclass注解.注意:标注为@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库表,但是他的属性都将映射到其子类的数据库字段中。

标注为@MappedSuperclass的类不能再标注@Entity或@Table注解,也无需实现序列化接口.

在进行实体类的封装时,有时候几张表中可能有很多的共同属性。每次都去建立不同的类很麻烦。这个时候可以建立一个共同属性的类,让其他类去继承这个类。

总结: 标注为@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库表,但是他的属性都将映射到其子类的数据库字段中。

@Inheritance

Hibernate继承映射(@Inheritance)
参考URL: https://blog.csdn.net/u014371184/article/details/90901407
(10)映射继承关系一之继承关系都映射在一张表中(@Inheritance(strategy=InheritanceType.SINGLE_TABLE))
參考URL: https://www.cnblogs.com/TestAndDevelp/p/12379371.html

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

EJB3支持三种类型的继承映射:
• 每个类一张表(Table per class)策略: 在Hibernate中对应元素:
• 每个类层次结构一张表(Single table per class hierarchy)策略:在Hibernate中对应元素
• 连接的子类(Joined subclasses)策略:在Hibernate中对应 元素

SINGLE_TABLE(将所有父类和子类集合在一张表)

SINGLE_TABLE 是将父类和其所有的子类集合在一块,存在一张表中,并创建一个新的字段来判断对象的类型。

TABLE_PER_CLASS (为每一个类创建一个表,这些表是相互独立的。)

TABLE_PER_CLASS 是为每一个类创建一个表,这些表是相互独立的。

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
继承策略是每个类层次结构映射一张表

这种映射策略每个类都会映射成一个单独的表,类的所有属性,包括继承的属性都会映射成表的列。

这种映射策略的缺点是:对多态关系的支持有限,当查询涉及到类继承结构时通常需要发起SQL UNION查询。

JOINED(将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系)

JOINED 是将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西京刀客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值