快速业务通道

使用Apache OpenJPA开发EJB 3.0应用,第6部分:处理实体生命周期事件的回调 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

使用Apache OpenJPA开发EJB 3.0应用,第6部分:处理实体生命周期事件的回调(3)

时间:2011-08-31 IBM 肖菁

如何使用回调方法

上面我们学习了将 Java 代码和实体事件结合起来的一些注释和它们的适用情况,下面我们学习如何在企 业应用中使用这些注释从而实现实体生命周期事件的回调。

首先我们学习 如何使用回调方法来处理实体生命周期事件的回调,回调方法都是在实体内中直 接定义的 Java 方法,这些回调方法可以是任何没有参数的方法。OpenJPA 中, 一个 Java 方法可以同时支持多个注释,这样它可以处理实体生命周期中多个阶 段的回调,比如我们在实体中定义一个 Java 方法 printHistory,我们可以同时 使用 javax.persistence.PrePersist 和 javax.persistence.PostPersist 注释 它,这样 printHistory 方法在实体被持久化之前和之后都会被调用。

下 面我们结合简单的例子来解释如何使用回调方法处理实体生命周期事件的回调, 假设存在这样的业务需求,对于实体 Animal,它有两个属性 id 和 name,我们 需要在企业应用运行中跟踪 Animal 全部生命周期过程中的状态变化,并且将这 种变化的过程打印在控制台上。

我们需要为实体类额外定义 7 个 Java 方法,他们分别处理实体生命周期的 7 个事件,然后通过上一节中提到的 7 个 注释将它们和实体生命周期联系起来,完整的 Animal 实体类的代码如下:

清单 1. Animal 实体类的代码

1.  public class  Animal { 2.  package org.vivianj.openjpa.beans; 3. 4.  import javax.persistence.Entity; 5.  import  javax.persistence.Id; 6.  import javax.persistence.PostLoad; 7.  import javax.persistence.PostPersist; 8.  import  javax.persistence.PostRemove; 9.  import  javax.persistence.PostUpdate; 10. import  javax.persistence.PrePersist; 11. import  javax.persistence.PreRemove; 12. import  javax.persistence.PreUpdate; 13. 14. @Entity 15.  public class Animal { 16.  @Id  17.  private long  id; 18. 19.  private String name; 20. 21.   public long getId() { 22.   return id; 23.  } 24. 25.  public void setId(long id) { 26.    this.id = id; 27.  } 28. 29.  public String  getName() { 30.   return name; 31.  } 32. 33.  public void setName(String name) { 34.   this.name  = name; 35.  } 36. 37.  /** 38.   *  logPrePersist 方法处理实体生命周期中的 PrePersist[实体被持久化之前]事 件 39.   */ 40.  @PrePersist 41.  public void  logPrePersist() { 42.   System.out.println("Animal[" + id +  "," + name + "] 将被持久化到数据库中。"); 43.  } 44. 45.  /** 46.   * logPostPersist方法处理实体生命周 期中的PostPersist[实体可以被持久化]事件 47.   */ 48.   @PostPersist 49.  public void logPostPersist() { 50.    System.out.println("Animal[" + id + "," + name + "] 可以被持 久化到数据库中了。"); 51.  } 52. 53.  /** 54.    * logPostLoad方法处理实体生命周期中的PostLoad[实体被加载到之后]事 件 55.   */ 56.  @PostLoad  57.  public void  logPostLoad() { 58.   System.out.println("Animal[" + id +  "," + name + "] 已经加载到内存中。"); 59.  } 60. 61.  /** 62.   * logP

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号