1

春と休止状態を使用しています。Hibernate 4.2Ejb3Configurationはクラスを非推奨として宣言しており、リスナーをセットアップできるメソッドgetEventListenersがありません。このクラスは以前は を取得していEntityManagerFactoryました。

データベースのオーディション(更新、挿入、削除イベントのロギング)に使用しています。試聴構成で EntityManagerFactory を取得するにはどうすればよいですか?

public class HibernateExtendedPersistenceProvider extends HibernatePersistence {

    private PostInsertEventListener[] postInsertEventListeners;
    private PostUpdateEventListener[] postUpdateEventListeners;
    private PostDeleteEventListener[] postDeleteEventListeners;

    @SuppressWarnings("rawtypes")
    @Override
    public EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) {
        Ejb3Configuration cfg = new Ejb3Configuration();
        setupConfiguration(cfg);
        Ejb3Configuration configured = cfg.configure( persistenceUnitName, properties );
        return configured != null ? configured.buildEntityManagerFactory() : null;
    }

    @SuppressWarnings("rawtypes")
    @Override
    public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map properties) {
        Ejb3Configuration cfg = new Ejb3Configuration();
        setupConfiguration(cfg);
        Ejb3Configuration configured = cfg.configure( info, properties );
        return configured != null ? configured.buildEntityManagerFactory() : null;
    }

    private void setupConfiguration(Ejb3Configuration cfg) {
        // 4.2: Ejb3Configuration deprecated and has no method getEventListeners
        cfg.getEventListeners().setPostInsertEventListeners(postInsertEventListeners); 
        cfg.getEventListeners().setPostDeleteEventListeners(postDeleteEventListeners);
        cfg.getEventListeners().setPostUpdateEventListeners(postUpdateEventListeners);
    }

    public void setPostInsertEventListeners(PostInsertEventListener[] postInsertEventListeners) {
        this.postInsertEventListeners = postInsertEventListeners;
    }

    public void setPostUpdateEventListeners(PostUpdateEventListener[] postUpdateEventListeners) {
        this.postUpdateEventListeners = postUpdateEventListeners;
    }

    public void setPostDeleteEventListeners(PostDeleteEventListener[] postDeleteEventListeners) {
        this.postDeleteEventListeners = postDeleteEventListeners;
    }
}
4

1 に答える 1

0

ソースコードを制御できる場合は、休止状態の環境を調べます。バージョン管理でうまく機能します。更新されたような単なる監査証跡ではなく、古いエンティティのバージョンを追跡します。

JPA エンティティ リスナー API には、変更前の元の値に簡単にアクセスできないという欠点があります。デルタを作成するには、これらの値をどこかから取得する必要があります。

Hibernate イベント リスナーを登録することはできますが、推奨される方法は SPI を使用することです。Hibernate Integrator をチェックして、その方法を確認してください。

于 2013-03-28T06:20:14.773 に答える