私は自分のエンティティに対する操作を監査するイベントリスナーを実装しました。たとえば、HibernatePreInsertというPreInsertEventListenerに1つ作成しました。また、私はHibernateIntegratorと呼ばれるインテグレータを設定しました。私はHibernate 4とSpring 4を使用しているので、META-INF/servicesの下にcom.dacasals.raspertwo.interceptors.HibernateInterceptorという名前のファイルを作成しました。そこには、インテグレータクラスが追加されました。しかし、アプリケーションを実行して新しい要素を挿入すると、何も起こりません。私のHibernatePrePersistのメッセージさえも表示されません。私がHibernate EventListenersを試してみるのは初めてですが、何が間違っているのか分かりません。ここでイベントリスナーがHibernateで動作していませんか?
は、ファイル構造も、私の問題に関与するクラスの例ですと:
リスナー:
public class HibernatePreInsert implements PreInsertEventListener{
private static final long serialVersionUID = 1L;
static final Logger logger = LoggerFactory.getLogger(HibernatePreInsert.class);
@Override
public boolean onPreInsert(PreInsertEvent event) {
if(event.getEntity() instanceof Person){
//display a message to know if this works or not
logger.info("It works");
}
return false;
}
}
インテグレーター:
public class HibernateIntegrator implements Integrator{
public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry){
final EventListenerRegistry registry = serviceRegistry.getService(EventListenerRegistry.class);
HibernatePreInsert listener = new HibernatePreInsert();
registry.prependListeners(EventType.PRE_INSERT, listener);
}
@Override
public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry) {
// TODO Auto-generated method stub
}
@Override
public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
// TODO Auto-generated method stub
}
}
ファイルcom.dacasals .raspertwo.interceptors.HibernateInterceptor:
com.dacasals.raspertwo.interceptors.HibernateInterceptor
ありがとうございます。
EDITED: 私は間違いを犯しました。私はHibernate 5ではなく、4を使用しています。
リスナーの目標は何ですか?エンティティ自体に値を設定したいのですか、別のテーブルに行を挿入したいですか? – Naros
実行されたイベントに関する情報をデータベースに保存します。たとえば、新しいPersonが挿入された場合、実行された操作のタイムスタンプを保存することはできません。私はonPreInsertメソッドで簡単な例を実行しようとしていましたが、何も起こらなかったので、メッセージを表示して何も起こっていないことを認識しました。 – Ethan
私はHibernate 4で 'hibernate-core'依存関係をインポートし、' hibernate-entitymanager'依存関係を使用せず、 'SessionFactory'を使って作業していると仮定します。それは正しい仮定ですか? – Naros