使用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
|