2017-03-16 9 views
1

sql dbへのアクセスごとにトリガーされるリスナーをHibernateに追加できますか?HibernateでI/O db操作をインターセプトする方法は?

MyThreadでHibernateクエリを実行し、このリスナーでThread.currentTread()instanceof MyThreadをチェックします。

I/O操作の前にスレッドチェックを呼び出す必要があります。現在のスレッドがMyThreadのインスタンスでない場合、UnexpectedThreadExceptionが発生するはずです。

私はorg.hibernate.interceptorを使用しようとしましたが、dbからデータを読み込む前に呼び出されるメソッドがないようです。

+0

org.hibernate.EmptyInterceptor。その使用方法を参照してください –

+0

onPrepareStatement? https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/EmptyInterceptor.html#onPrepareStatement-java.lang.String- –

答えて

0
Session session = sessionFactory.openSession(); 
session.addEventListeners(new BaseSessionEventListener() { 
    @Override 
    public void jdbcExecuteStatementStart() { 
     DbTaskThread.requireDbTaskThread(); 
     super.jdbcExecuteStatementStart(); 
    } 

    @Override 
    public void jdbcConnectionReleaseStart() { 
     DbTaskThread.requireDbTaskThread(); 
     super.jdbcConnectionReleaseStart(); 
    } 

    @Override 
    public void jdbcConnectionAcquisitionStart() { 
     DbTaskThread.requireDbTaskThread(); 
     super.jdbcConnectionAcquisitionStart(); 
    } 
}); 
関連する問題