未调用EntityListener

时间:2015-04-13 06:24:04

标签: java hibernate

我有两节课 -
Employee.java

@Entity(name="EMPLOYEE")
@EntityListeners(value = { EmployeeLog.class })
public class Employee implements Serializable{

    @Id @GeneratedValue
    @Column(name="EMP_ID")
    private int empID;

    @Column(name="EMP_NAME")
    private String empName;

    public int getEmpID() {
        return empID;
    }

    public void setEmpID(int empID) {
        this.empID = empID;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

}

EmployeeLog.java

import java.io.Serializable;

import javax.persistence.PostUpdate;
import javax.persistence.PreUpdate;


public class EmployeeLog implements Serializable{
    @PreUpdate
    public void logPreUpdate(Employee e) {
        System.out.println("Before database SAVE/UPDATE operation.");
    }

    @PostUpdate
    public void logPostUpdate(Employee e) {
        System.out.println("After database SAVE/UPDATE operation.");
    }
}

每当Employee更新时,我希望在Employee类上调用EmployeeLog监听器。问题是,我的听众没有被调用。这是我的测试代码 -

Session session = factory.openSession();
session.beginTransaction();

Employee emp = (Employee) session.get(Employee.class, 1);
System.out.println("Employee :::::::::::"+emp.getEmpName());
emp.setEmpName("John Doe Modified");
session.update(emp);
System.out.println("Employee updated::::"+emp.getEmpName());


session.getTransaction().commit();
session.close();

我发现这篇文章与EntityListener EntityLIstener not called via OneToOne mapping with cascade

有关

在本文中有一条评论 -

  

我怀疑上面的设置不起作用,因为应用程序   对象实际上没有改变,这就是为什么@prePersist和   @PreUpdate不会被调用。

这里我在调用update方法之前通过setter方法更改了Employee对象,但这不起作用。什么时候听到完全听众?如果我通过更新查询更新Employee,它会被执行吗? 我完全错了吗?

0 个答案:

没有答案