我已经基于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()方法,但这只会产生异常,不知道如何解决这个问题?
谢谢
最大
答案 0 :(得分:3)
如果要为每个被删除的实体触发事件,最好的方法是将@PostRemove处理程序添加到相关实体并添加触发事件的代码。
一些例子http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics
将CDI对象注入EntityListener可能会遇到一些问题,但您可以按照CDI injection in EntityListeners
中的说明解决此问题(直到JPA 2.1)