当前位置:网站首页>【原创】JPA中@PrePersist和@PreUpdate的用法
【原创】JPA中@PrePersist和@PreUpdate的用法
2022-08-09 10:23:00 【DCTANT】
在项目里看到了@PrePersist和@PreUpdate,这两个注解是我以前从来没见过的,百度了半天只知道它是做什么的,但是不知道怎么用,还是得我自己试了才知道。
参考链接(https://blog.csdn.net/sunrainamazing/article/details/75041402、https://blog.csdn.net/szyyyp/article/details/54311118)
@PrePersist
我通过打断点试了一下,发现其中@PrePersist的切点是在entityManager.persist(entity)的反射invoke方法执行前调用
可以理解为持久化对象前执行,因此就可以做些事情了,比如设置创建时间,设置对象删除状态等等
@PreUpdate
我同样通过打断点,发现这个注解执行的切面实在entityManager.merge(entity);之后执行,而且如果更新发现更新前和更新后值没有发生任何变化,则@PreUpdate内的方法并不会被执行。这就很奇怪了,明明叫PreUpdate,却在merge方法后执行,不知道Spring团队是怎么想的,或许是我太菜了,不懂他们的深刻造诣吧
既然知道了它的执行点,那就也可以做些事了,比如更新“更新时间”,如果是删除则更新删除时间等等。
怎么才能被执行?
这是最关键的,也是上述两篇博客并没有讲到的,那就是需要在BasePo上加一个注解!!
@EntityListeners(JpaListener.class),这个注解是必须要加的,不然你会发现这两个方法根本不会被调用!!这个太坑了,害得我找了好久才发现这个问题!!
边栏推荐
猜你喜欢
随机推荐
EndNoteX9 OR X 20 Guide
2021-01-11-雪碧图做表情管理器
集合与函数
使用.NET简单实现一个Redis的高性能克隆版(四、五)
Dream Notes 0809
基本运算符
使用cpolar远程连接群晖NAS(创建临时链接)
JDBC中的增删改查操作
Win系统 - 罗技 G604 鼠标蓝灯闪烁、失灵解决方案
ESIM(Enhanced Sequential Inference Model)- 模型详解
Win32控件--------------------WM_DRAWITEM消息测试程序
1004 成绩排名 (20 分)
Collections and Functions
动态内存管理
[ASM] Bytecode operation MethodVisitor case combat generation object
今天做了手机播放器的均衡器
在犹豫中度过了老多天,今天的工作时记录
基于信号量与环形队列实现读写异步缓存队列
实验室装修及改造工程程序简介
深度学习--生成对抗网络(Generative Adversarial Nets)