CDI如何为已删除的实体触发事件

时间:2012-12-16 10:44:19

标签: jboss7.x cdi jboss-weld

我已经基于JBoss Kitchensink示例创建了一个示例应用程序。此应用程序使用CDI Bean记录实体。我发现使用JPA +在新创建的实体上触发Observer很容易存储新的实体:

@Inject
private Event<MyEntity> propEventSrc;

public void put(MyEntity p){

      em.persist(p);
      propEventSrc.fire(p);
}

但是,如果用户想要删除所有记录,我找不到触发事件的方法。换句话说:
    public void delete(){

    Query query = em.createQuery("delete FROM MyEntity ");

    query.executeUpdate();

        // I need to fire an event here so that the List of MyEntities from the Producer class gets updated           
}

我尝试过使用propEventSrc的notifyAll()方法,但这只会产生异常,不知道如何解决这个问题?
谢谢 最大

1 个答案:

答案 0 :(得分:3)

如果要为每个被删除的实体触发事件,最好的方法是将@PostRemove处理程序添加到相关实体并添加触发事件的代码。

一些例子http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics

将CDI对象注入EntityListener可能会遇到一些问题,但您可以按照CDI injection in EntityListeners

中的说明解决此问题(直到JPA 2.1)