拦截器

    因此一个对象通过它生命周期中的不同阶段,并且 Interceptor 接口提供了在不同阶段能被调用来进行一些所需要的任务的方法。这些方法是从会话到应用程序的回调函数,允许应用程序检查或操作一个持续对象的属性,在它被保存,更新,删除或上传之前。以下是在 Interceptor 接口中可用的所有方法的列表。

    Hibernate 拦截器给予了我们一个对象如何应用到应用程序和数据库的总控制。

    为了创建一个拦截器你可以直接实现 Interceptor 类或者继承 EmptyInterceptor 类。以下是简单的使用 Hibernate 拦截器功能的步骤。

    创建拦截器

    现在让我们稍微修改我们的第一个例子,我们使用 EMPLOYEE 表单和 Employee 类:

    1. private int id;
    2. private String firstName;
    3. private String lastName;
    4. private int salary;
    5. public Employee() {}
    6. public Employee(String fname, String lname, int salary) {
    7. this.firstName = fname;
    8. this.lastName = lname;
    9. this.salary = salary;
    10. }
    11. public int getId() {
    12. return id;
    13. }
    14. public void setId( int id ) {
    15. this.id = id;
    16. }
    17. public String getFirstName() {
    18. return firstName;
    19. }
    20. public void setFirstName( String first_name ) {
    21. this.firstName = first_name;
    22. public String getLastName() {
    23. return lastName;
    24. }
    25. this.lastName = last_name;
    26. }
    27. public int getSalary() {
    28. return salary;
    29. }
    30. public void setSalary( int salary ) {
    31. this.salary = salary;
    32. }
    33. }

    创建数据库表

    第二步将是在你的数据库中创建表。一张表对应每个你提供持久性的对象。考虑以上的对象需要被存储和检索到以下的 RDBM 表中:

    这个步骤是来创建一个指导 Hibernate 如何将定义的类或者多个类映射到数据库表单中的映射文件。

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!DOCTYPE hibernate-mapping PUBLIC
    3. "-//Hibernate/Hibernate Mapping DTD//EN"
    4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    5. <hibernate-mapping>
    6. <class name="Employee" table="EMPLOYEE">
    7. <meta attribute="class-description">
    8. This class contains the employee detail.
    9. </meta>
    10. <id name="id" type="int" column="id">
    11. <generator class="native"/>
    12. </id>
    13. <property name="firstName" column="first_name" type="string"/>
    14. <property name="lastName" column="last_name" type="string"/>
    15. <property name="salary" column="salary" type="int"/>
    16. </class>

    创建 Application 类

    这里是编译和运行上面提及的应用程序的步骤。确保你已经在处理编译和执行前正确设置了 PATH 和 CLASSPATH。

    • 创建在 configuration 章节中解释的 hibernate.cfg.xml 配置文件。
    • 创建如上所示的 Employee.hbm.xml 映射文件。
    • 创建如上所示的 Employee.java 源文件并编译。
    • 创建如上所示的 MyInterceptor.java 源文件并编译。
    • 创建如上所示的 ManageEmployee.java 源文件并编译。
    • 执行 ManageEmployee 来运行程序。

    你将得到以下结果,而且记录将在 EMPLOYEE 表单中被创建。

    1. $java ManageEmployee
    2. .......VARIOUS LOG MESSAGES WILL DISPLAY HERE........
    3. Create Operation
    4. preFlush
    5. postFlush
    6. Create Operation
    7. preFlush
    8. postFlush
    9. Create Operation
    10. preFlush
    11. postFlush
    12. First Name: Zara Last Name: Ali Salary: 1000
    13. First Name: Daisy Last Name: Das Salary: 5000
    14. First Name: John Last Name: Paul Salary: 10000
    15. preFlush
    16. postFlush
    17. preFlush
    18. Update Operation
    19. postFlush
    20. preFlush
    21. postFlush
    22. First Name: Zara Last Name: Ali Salary: 5000
    23. First Name: John Last Name: Paul Salary: 10000
    24. postFlush

    如果你检查你的 EMPLOYEE 表单,它应该有如下结果: