保存前拦截器
基本概念
任何实体对象在被保存指令保存 (无论插入还是更新) 前,都会被拦截器拦截。
在此,用户有一次修改被保存数据的机会,尤其是为某些缺失的属性赋值。
提示
如果使用拦截器为缺失的属性赋值*(这也是推荐用法)*,就和数据库级别的默认值有点类似,但是存在如下差异
-
数据库默认值只能提供业务无关的默认值规则。
-
拦截器可以根据业务上下文相关信息提供默认值,比如,当前用户在权限系统中的身份信息。
用户可以根据这类业务上下文信息提供和业务紧密结合的默认值,这是数据库级别默认值无法实现的。
定义被拦截数据格式
Draft拦截器和Save指令配合使用,在对象被保存之前调整数据。
假如大部分实体表都具备created_time、modified_time、created_by和modified_by四个字段,可以提供如下超类
- Java
- Kotlin
@MappedSuperclass
public interface BaseEntity {
LocalDateTime createdTime();
LocalDateTime modifiedTime();
@Nullable
@ManyToOne
@OnDissociate(DissociateAction.SET_NULL)
User creator();
@Nullable
@ManyToOne
@OnDissociate(DissociateAction.SET_NULL)
User editor();
}
@MappedSuperclass
interface BaseEntity {
val createdTime: LocalDateTime
val modifiedTime: LocalDateTime
@ManyToOne
@OnDissociate(DissociateAction.SET_NULL)
val createdBy: User?
@ManyToOne
@OnDissociate(DissociateAction.SET_NULL)
val modifiedBy: User?
}