快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
部分:处理实体生命周期事件的回调(5) 时间:2011-08-31 IBM 肖菁

下面的信息是执行 上面的客户端后控制台打印出的信息,通过这些信息的先后顺序,我们可以了解 到这些事件的具体时机和先后顺序:

清单 3. 客户端后控制台打印出的信 息

1.  Animal[1,小狗] 将被持久化到数据库中。 2.   Animal[1,小狗] 可以被持久化到数据库中了。 3.  Animal[1,小狗]  将很快被持久化到数据库中。 4.  Animal[1,小狗] 已经被持久化到数 据库中。 5. 6.  Animal[1,小狗] 已经加载到内存中。 7.   Animal[1,小猫] 将很快被持久化到数据库中。 8.  Animal[1,小猫 ] 已经被持久化到数据库中。 9. 10. Animal[1,小猫] 已经加载 到内存中。 11. Animal[1,小猫] 将从数据库中删除。 12.  Animal[1,小猫] 已经从数据库中删除。

OpenJPA 中还可以将一 个 Java 方法注册到两个实体生命周期事件上,比如我们可以用下面的这段代码 ,将 Animal 实体 log 方法注册到 PrePersist 和 PostPersiste 这两个实体生 命周期事件上。

清单 4. 将方法注册到两个实体生命周期事件上

1. public class Animal { 2. 3.   … 4. 5.  @PrePersist 6.  @PostPersist 7.   public void log(){ 8.   System.out.println("Entity is  Persisted."); 9.  } 10. }

如何使用实体******

在实体类中同时提供处理实体生命周期回调方法的代码不是很优雅的编程 方式,开发者通常考虑使用非持久的******类处理回调方法。OpenJPA 中支持使 用实体******处理实体的回调方法 , 而不是直接在实体类中处理回调方法。

在 OpenJPA 中,实体******类需要提供一个 public 的无参数构造器, 其他要求和在实体类中定义回调方法一样 , 一个******类同样可以处理多种回调 ,只需要为******中的方法提供回调方法对应的注释如 javax.persistence.PrePersist、javax.persistence.PostPersist 等。特别的 是,******中的每一个回调方法必须有一个 java.lang.Object 类型的参数,该 参数对应的对象代表了触发当前事件的实体对象。

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

时间:2011-08-31 IBM 肖菁

我们可以使用下面的代 码创建一个实体******类。

清单 5. 创建一个实体******类

1. public class AnimalListener{ 2.   public  AnimalListener(){ 3.   } 4. 5.   /** 6.    * logPrePersist方法处理实体生命周期中的PrePersist[实体被持久化之前]事 件 7.   */ 8.   @PrePersist 9.  public void  logPrePersist(Object entity){ 10.   System.out.println("实体将 会被持久化."); 11.  } 12. 13.   /** 14.   *  logPostPersist方法处理实体生命周期中的PostPersist[实体可以被持久化]事 件 15.   */ 16.  @PostPersist 17.  public void  logPostPersist(Object entity){ 18.   System.out.println("实体 可以被持久化了."); 19.  } 20. 21.   … //  可以为实体******提供更多方法,处理实体的更多回调事件。 22. 23. }

创建实体******后,开发者将实体******注册到需要被 监听的实体中,使用 javax.persistence.EntityListeners 注释可以为实体注册 ******,这个注释支持同时为实体类设置多个****** , 只需要在注释的属性中提 供多个参数,各参数之间使用”,”隔开。我们可以使用下面的代码为 实体注册一个或者多个******类。

清单 6. 为实体注册一个或者多个监听 器类

1. @EntityListeners ({ AnimalListener.class, ...})   2. public class Animal{

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号