营销网站制作公司推荐,海安网站优化,乐清市城乡建设局网站,杭州平面设计公司排行JPA提供了一种事件监听器的机制#xff0c;用于SQL审计#xff0c;通过监听器我们可以很快速地去自动更新创建时间、修改时间#xff0c;主要步骤如下#xff1a;
一、创建基础实体#xff0c;包含了创建和修改时间#xff0c;然后让其他真正的实体继承该实体#xff0…JPA提供了一种事件监听器的机制用于SQL审计通过监听器我们可以很快速地去自动更新创建时间、修改时间主要步骤如下
一、创建基础实体包含了创建和修改时间然后让其他真正的实体继承该实体减少重复冗余代码
MappedSuperclass
EntityListeners(AuditingEntityListener.class)
Getter
public class AbstractAuditEntity implements Serializable {CreatedDateColumn(name create_time, nullable false, updatable false)private Date createTime;LastModifiedDateColumn(name update_time, nullable false)private Date updateTime;
}注意需要两个注解MappedSuperclass代表是基础实体不会创建数据库表EntityListeners注解启用监听器我们需要使用的是AuditingEntityListener这个监听器。
同时CreatedDate、LastModifiedDate代表会在创建和修改时更新时间字段包括创建时间和修改时间。
二、启用JPA的审计功能 启动类需要加上EnableJpaAuditing注解。
三、修改已有实体类 四、如果已经集成QueryDSL请重新compile一下 可以看到会自动加上super相关字段。
五、调试接口查看下效果 默认createTime和updateTime都会填上然后我们试下修改 我们会发现修改后更新时间为什么没有发生改变 原因JSR 317规范指出对实体类的生命周期操作不应该通过EntityManager或Query注解实现所以Audit无法捕获Query注解产生的更新。例如 解决方法是单独更新时间或通过JPA标准规范更新实体如下 最终效果 可以看到CREATE_TIME和UPDATE_TIME都更新了。