ラッパーやHibernate/Springなどの具体的な実装に関係なく、データソースではなくデータベースタイプをチェックできます(これが適切な場合があります)。
アイデアは、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を確認し、ドライバー名を確認し、ほとんどすべてを確認します)。
編集:上記のアプローチは休止状態の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");
}