我使用最新的 spring 和 hibernate 版本(spring 3.2.1 和 hibernate 4.1.9)升级了我的项目,但它们似乎不兼容。其中一项更改是 Spring 的 jdbc 框架的一部分。
public <T> T execute(StatementCallback<T> action) throws DataAccessException {
Assert.notNull(action, "Callback object must not be null");
Connection con = DataSourceUtils.getConnection(getDataSource());
Statement stmt = null;
try {
Connection conToUse = con;
if (this.nativeJdbcExtractor != null &&
this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) {
conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
}
stmt = conToUse.createStatement();
applyStatementSettings(stmt);
Statement stmtToUse = stmt;
if (this.nativeJdbcExtractor != null) {
stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt);
}
T result = action.doInStatement(stmtToUse);
handleWarnings(stmt);
return result;
}
catch (SQLException ex) {
// Release Connection early, to avoid potential connection pool deadlock
// in the case when the exception translator hasn't been initialized yet.
JdbcUtils.closeStatement(stmt);
stmt = null;
DataSourceUtils.releaseConnection(con, getDataSource());
con = null;
throw getExceptionTranslator().translate("StatementCallback", getSql(action), ex);
}
finally {
JdbcUtils.closeStatement(stmt);
DataSourceUtils.releaseConnection(con, getDataSource());
}
Hibernate 4.1.9 现在代理 jdbc 语句,异常转换器现在启动,抛出运行时异常而不是检查异常。例如,现在抛出运行时异常而不是 SQLException - SQLGrammerException。
Spring 可能应该处理这种休眠变化,对吧?
编辑
我在 hibernate 论坛、hibernate jira 论坛和开发邮件列表上讨论过。他们声称,由于这是一个主要版本 (4.x),因此预计会出现此类兼容性问题。他们要求客户更新他们的代码以解决问题。
我在spring jira 论坛上发布了相同的问题,目前正在讨论中。
我想知道其他人是如何解决这个问题的!