Spring SimpleJdbcCall 和 Oracle 同义词
Spring SimpleJdbcCall and Oracle Synonyms
将 Spring 框架从 <4.2.2.RELEASE> 升级到 <5.0.2.RELEASE> 后,我无法使用同义词调用 Oracle 数据库中的存储过程 (SimpleJdbcCall ).我注意到当我的代码开始抛出
无法确定正确的调用签名 - "name of my stored procedure"
没有 procedure/function/signature
例外。然后调试发现存储过程在同义词后面是找不到的。使用旧的 Spring 版本这不是问题。那么他们改变了什么,我现在可以做什么?我阅读了有关从数据源检索原始 Oracle 连接并在那里激活同义词标志的信息:https://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleConnection.html#setIncludeSynonyms_boolean_
但在我看来这不是 "beautiful" 解决方案...
因为我没有找到任何其他解决方案,所以我从 SimpleJdbcCall 切换到通常的 Spring JdbcTemplate 并使用
调用我的存储过程
private jdbcTemplate = new JdbcTemplate(myDataSource);
try{
CallableStatement callableStatement = jdbcTemplate.getDataSource().getConnection().prepareCall("{call PACKAGE_NAME.STORED_PROCEDURE_NAME}");
callableStatement.executeUpdate();
} catch(SQLException e)
{
...
}
当时效果不错。
更新:问题已在 Spring 5.0.4.RELEASE 中修复,请考虑 https://jira.spring.io/browse/SPR-16478
将 Spring 框架从 <4.2.2.RELEASE> 升级到 <5.0.2.RELEASE> 后,我无法使用同义词调用 Oracle 数据库中的存储过程 (SimpleJdbcCall ).我注意到当我的代码开始抛出
无法确定正确的调用签名 - "name of my stored procedure"
没有 procedure/function/signature例外。然后调试发现存储过程在同义词后面是找不到的。使用旧的 Spring 版本这不是问题。那么他们改变了什么,我现在可以做什么?我阅读了有关从数据源检索原始 Oracle 连接并在那里激活同义词标志的信息:https://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleConnection.html#setIncludeSynonyms_boolean_
但在我看来这不是 "beautiful" 解决方案...
因为我没有找到任何其他解决方案,所以我从 SimpleJdbcCall 切换到通常的 Spring JdbcTemplate 并使用
调用我的存储过程private jdbcTemplate = new JdbcTemplate(myDataSource);
try{
CallableStatement callableStatement = jdbcTemplate.getDataSource().getConnection().prepareCall("{call PACKAGE_NAME.STORED_PROCEDURE_NAME}");
callableStatement.executeUpdate();
} catch(SQLException e)
{
...
}
当时效果不错。
更新:问题已在 Spring 5.0.4.RELEASE 中修复,请考虑 https://jira.spring.io/browse/SPR-16478