我有两节课 -
的 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,它会被执行吗? 我完全错了吗?