1

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

@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() 方法,但这只会产生异常,知道如何解决这个问题吗?
谢谢马克斯

4

1 回答 1

3

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

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

您在将 CDI 对象注入 EntityListener 时可能会遇到一些问题,但您可以按照 EntityListeners 中的 CDI 注入中所述解决此问题(直到 JPA 2.1)

于 2012-12-16T23:03:50.907 回答