如何拦截Hibernate中的I / O数据库操作?

时间:2017-03-16 06:08:05

标签: java multithreading hibernate

我可以在每次访问sql db时触发Hibernate的监听器吗?

我想在MyThread中执行Hibernate查询,在这个监听器中,我要检查:Thread.currentTread()是MyThread的实例。

应在I / O操作之前调用线程检查。如果当前线程不是MyThread的实例,则应触发UnexpectedThreadException。

我尝试使用org.hibernate.interceptor,但似乎没有在从db读取数据之前调用的方法。

1 个答案:

答案 0 :(得分: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();
    }
});