我有几个应该使用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"); }
原文地址:https://www.jb51.cc/java/239897.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。