2017-03-16 23 views
1

我可以將偵聽器添加到Hibernate中,這將在每次訪問sql db時觸發嗎?如何攔截Hibernate中的I/O數據庫操作?

我想在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(); 
    } 
});