【问题标题】:CDI how to fire events for deleted EntitiesCDI 如何为已删除的实体触发事件
【发布时间】:2012-12-16 10:44:18
【问题描述】:

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

@Inject
private Event<MyEntity> propEventSrc;

public void put(MyEntity p){

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

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

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

【问题讨论】:

    标签: jboss7.x cdi jboss-weld


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2013-08-10
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      相关资源
      最近更新 更多