加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何确定Hibernate会话正在使用的DataSource?

发布时间:2020-12-15 01:01:44 所属栏目:Java 来源:网络整理
导读:我有几个应该使用HSQLDB的单元测试,但我知道其中一些实际上正在使用物理数据库.我想在测试中添加一个检查,以确保正在使用的DataSource用于HSQLDB,而不是实时DB. 从hibernate会话对象(org.hibernate.classic.Session),我如何检查DataSource 更新: 我也可以访
我有几个应该使用HSQLDB的单元测试,但我知道其中一些实际上正在使用物理数据库.我想在测试中添加一个检查,以确保正在使用的DataSource用于HSQLDB,而不是实时DB.

从hibernate会话对象(org.hibernate.classic.Session),我如何检查DataSource

更新:
我也可以访问会话工厂(org.hibernate.impl.SessionFactory).

详细信息:Hibernate 3.2

解决方法

无论Hibernate / Spring等的包装器和具体实现如何,您可以检查不是DataSource,而是检查数据库类型(这可能是合适的).

这个想法是使用DatabaseMetaData并检查它的类型(因为Hibernate检测到方言):

private boolean isTestDb(Session session) {
    return session.doReturningWork(new ReturningWork<Boolean>() {
        @Override
        public Boolean execute(Connection connection) throws SQLException {
            DatabaseMetaData metaData = connection.getMetaData();
            return metaData.getDatabaseProductName().startsWith("HSQL");
        }
    });
}

注意,可以按照您想要的方式更改方法体(检查JDBC URL,检查驱动程序名称,检查几乎所有内容).

编辑:上面的方法适用于hibernate 3.5.

对于Hibernate早期版本(例如3.2),它可能更容易:

private boolean isTestDb(Session session) {
    Conection connection = session.connection();//deprecated method,which was dumped in hibernate 3.5+
    DatabaseMetaData metaData = connection.getMetaData();
    return metaData.getDatabaseProductName().startsWith("HSQL");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读