1

JBossKitchensinkの例に基づいてサンプルアプリケーションを作成しました。このアプリケーションは、CDIBeanを使用してエンティティを記録します。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に注入する際に問題が発生する可能性がありますが、EntityListenerでのCDI注入で説明されているように、これを回避できます(JPA 2.1まで)。

于 2012-12-16T23:03:50.907 に答える