您可以查看可以记录 jpa 生命周期的JPA EntityListeners。
您可以在同一个类中注释生命周期回调方法,如下所示
使用生命周期回调方法
@Entity
public class Employee {
@TableGenerator(name = "employee_gen", pkColumnName = "gen_name", valueColumnName = "gen_val", allocationSize = 1,table="id_gen")
@Id
@GeneratedValue(generator = "employee_gen", strategy = GenerationType.TABLE)
private int idEmployee;
private String firstName;
private String lastName;
private int salary;
public int getIdEmployee() {
return idEmployee;
}
public void setIdEmployee(int idEmployee) {
this.idEmployee = idEmployee;
}
// gettrs and setters
@PrePersist
public void methodInvokedBeforePersist() {
System.out.println("Invoked before persisting employee");
}
@PostPersist
public void methodInvokedAfterPersist() {
System.out.println("Invoked after persisting employee");
}
@PreUpdate
public void methodInvokedBeforeUpdate() {
System.out.println("Invoked before updating employee");
}
@PostUpdate
public void methodInvokedAfterUpdate() {
System.out.println("Invoked after updating employee");
}
@PreRemove
public void methodInvokedBeforeRemove() {
System.out.println("Invoked before removing employee");
}
@PostRemove
public void methodInvokedAfterRemove() {
System.out.println("Invoked after removing employee");
}
}
Run Code Online (Sandbox Code Playgroud)
使用单独的 EntityListener 类 假设您有 Employee 实体,您想为其监听其生命周期
@Entity
@EntityListeners(EmployeeLoggingListener.class)
public class Employee{...}
Run Code Online (Sandbox Code Playgroud)
和EmployeeLoggingListerner如下
public class EmployeeLoggerListener {
@PrePersist
public void methodInvokedBeforePersist(Employee emp) {
System.out.println("persisting employee with id = " + emp.getIdEmployee());
}
@PostPersist
public void methodInvokedAfterPersist(Employee emp) {
System.out.println("Persisted employee with id = " + emp.getIdEmployee());
}
@PreUpdate
public void methodInvokedBeforeUpdate(Employee emp) {
System.out.println("Updating employee with id = " + emp.getIdEmployee());
}
@PostUpdate
public void methodInvokedAfterUpdate(Employee emp) {
System.out.println("Updated employee with id = " + emp.getIdEmployee());
}
@PreRemove
private void methodInvokedBeforeRemove(Employee emp) {
System.out.println("Removing employee with id = " + emp.getIdEmployee());
}
@PostRemove
public void methodInvokedAfterRemove(Employee emp) {
System.out.println("Removed employee with id = " + emp.getIdEmployee() );
}
}
Run Code Online (Sandbox Code Playgroud)