有半個月沒有更新了,倒不是我沒有繼續學習,工作比較忙,晚上學習的時間短,沒有太多時間寫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
天獨 閱讀(276)
評論(0) 編輯 收藏 所屬分類:
Java