文章目录
- @PrePersist注解 和 @PreUpdate注解
- @PreUpdate
- @PrePersist
- 应用场景
- 给一张表加上create_time,update_time这样的字段,想实现自动保存,更新这两个字段
- @MappedSuperclass
- @Inheritance
- SINGLE_TABLE(将所有父类和子类集合在一张表)
- TABLE_PER_CLASS (为每一个类创建一个表,这些表是相互独立的。)
- JOINED(将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系)
@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 是将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系。