当前位置:网站首页>【原创】JPA中@PrePersist和@PreUpdate的用法

【原创】JPA中@PrePersist和@PreUpdate的用法

2022-08-09 10:23:00 DCTANT

在项目里看到了@PrePersist和@PreUpdate,这两个注解是我以前从来没见过的,百度了半天只知道它是做什么的,但是不知道怎么用,还是得我自己试了才知道。

参考链接(https://blog.csdn.net/sunrainamazing/article/details/75041402https://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),这个注解是必须要加的,不然你会发现这两个方法根本不会被调用!!这个太坑了,害得我找了好久才发现这个问题!!

 

 

 

原网站

版权声明
本文为[DCTANT]所创,转载请带上原文链接,感谢
https://blog.csdn.net/DCTANT/article/details/115583053