有半个月没有更新了,倒不是我没有继续学习,工作比较忙,晚上学习的时间短,没有太多时间写blog
今天,说CallBack,JPA为我们提供了一些在进行CURD前后的一些callback methods,这些方法可以在我们进行数据持久化和查询前后,进行一些操作,比如纪录日志。
先来介绍写有几种callback methods annotation:
@PerPresist 持久化之前调用调用
@PostPersist 持久化之后(官方文档是在Object状态变成 Persist 状态)
@PostLoad 查询之后
@PreUpdate和@PostUpdate 这两个分别是在更新之前和之后,不过这两个必须是在PostLoad之后,对查询出来的数据进行更新,才会触发
@PreRemove和@PostReomve 分别是删除前和删除后(官方文档是Object状态变为deleted 状态)
下面是我的例子,当然这里只有关键代码:
2010年4月22日 星期四
1 @PrePersist
2 public void logPrePersist() {
3 logger.info("PrePersist " + this.getTitle());
4 }
5
6 @PostPersist
7 public void logPostPersist() {
8 logger.info("PostPersist " + this.getTitle());
9 }
10
11 @PostLoad
12 public void logPostLoad() {
13 logger.info("PostLoad " + this.getTitle());
14 }
15
16 @PreUpdate
17 public void logPreUpdate() {
18 logger.info("PreUpdate " + this.getTitle());
19 }
20
21 @PostUpdate
22 public void logPostUpdate() {
23 logger.info("PostUpdate " + this.getTitle());
24 }
25
26 @PreRemove
27 public void logPreRemove() {
28 logger.info("PreRemove " + this.getTitle());
29 }
30
31 @PostRemove
32 public void logPostRemove() {
33 logger.info("PostRemove " + this.getTitle());
34 }
当然也可以用Entity Listeners
,如:
在实体类上加上这个注解:@EntityListeners(value = { MagazineLog.class })
然后写MagazineLog.java:
1 public class MagazineLog {
2 /**
3 * Logger for this class
4 */
5 private static final Logger logger = LoggerFactory.getLogger(MagazineLog.class);
6
7 @PrePersist
8 public void logPrePersist(Object pc) {
9 logger.info("PrePersist " + ((Magazine)pc).getTitle());
10 }
11
12 @PostPersist
13 public void logPostPersist(Object pc) {
14 logger.info("PostPersist " + ((Magazine)pc).getTitle());
15 }
16
17 @PostLoad
18 public void logPostLoad(Object pc) {
19 logger.info("PostLoad " + ((Magazine)pc).getTitle());
20 }
21
22 @PreUpdate
23 public void logPreUpdate(Object pc) {
24 logger.info("PreUpdate " + ((Magazine)pc).getTitle());
25 }
26
27 @PostUpdate
28 public void logPostUpdate(Object pc) {
29 logger.info("PostUpdate " + ((Magazine)pc).getTitle());
30 }
31
32 @PreRemove
33 public void logPreRemove(Object pc) {
34 logger.info("PreRemove " + ((Magazine)pc).getTitle());
35 }
36
37 @PostRemove
38 public void logPostRemove(Object pc) {
39 logger.info("PostRemove " + ((Magazine)pc).getTitle());
40 }
41 }
就这些,这个比较简单
posted on 2010-04-22 20:01
天独 阅读(266)
评论(0) 编辑 收藏 所属分类:
Java