4

对于我们的应用程序,我们需要使用休眠实现触发器。我们可以找到的一个最佳解决方案是使用 Annotation 的实体侦听器,因为我们需要侦听特定的实体更改。

除了使用命名查询删除之外,一切都运行良好,它没有给出任何事件。

代码实现 **实体** - 这里我们添加了监听器

@Entity
@EventListeners(EmployeeEventListener.class)
public class Employee {

  @Id
  private String uid;
  @Basic
  private Calendar lastUpdated;

实体监听器-

侦听器占用被修改的实体 asd 执行预期的操作

public class EmployeeEventListener {
  @PrePersist
  public void prePersist(Object object) {
    Employee employee = (Employee)object;
    employee.setUID(UIDGenerator.newUUI());
    employee.setLastUpdated(Calendar.getInstance());
  }
  @PostUpdate
  public void postUpdate(Object object) {
    Employee employee = (Employee)object;
    employee.setLastUpdated(Calendar.getInstance());
  }

@PrePersist@PostUpdate当我在实体管理器上使用 save 或 saveorupdate 时效果很好。但是在执行删除命名查询时,我没有得到@PreRemove@PostRemove

我也想获得一个删除事件。

4

1 回答 1

5

这是不可能的:The Interceptor interface provides callbacks from the session to the application并且通过本机 SQL 删除的对象不会传递给会话,因此回调不会运行

于 2013-08-15T17:21:31.500 回答