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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 西藏| 涟水县| 会泽县| 高阳县| 哈密市| 枝江市| 阿巴嘎旗| 信阳市| 会昌县| 浠水县| 同仁县| 无极县| 龙井市| 岳阳市| 临颍县| 垫江县| 长沙县| 临沂市| 乾安县| 东辽县| 绩溪县| 霍林郭勒市| 灯塔市| 本溪市| 锡林浩特市| 呼和浩特市| 乌鲁木齐县| 乌恰县| 江孜县| 竹溪县| 上犹县| 定州市| 隆回县| 河曲县| 彰化市| 滕州市| 建始县| 乌兰县| 唐海县| 牙克石市| 萍乡市|