首页 > 解决方案 > 无法确定正确的调用签名 - mysql 中不同模式的相同存储过程

问题描述

我已经使用 mysql 创建了存储过程,并且我正在使用 SimpleJdbcCall 从 spring mvc 代码中调用存储过程。

Spring框架版本:5.2.1

下面是我的数据库结构

MYSQL 数据库

schema1 -> 存储过程 A

schema2 -> 存储过程 A

两种模式几乎相同(但表更改很少),因此我们在两种模式下都创建了相同的存储过程。下面是例外

org.springframework.dao.InvalidDataAccessApiUsageException: Unable to determine the correct call signature - multiple procedures/functions/signatures for 'Transfer_Stocks': found [schema1.null.Transfer_Stocks, schema2.null.Transfer_Stocks]

如果我在两个模式上都有存储过程,则会出现问题,虽然数据源仅指向 spring mvc 中的 schema1,但 SimpleJdbcCall 似乎也在寻找其他模式,因为在上述异常中我可以看到所有模式都被列出 ([schema1. null.Transfer_Stocks,schema2.null.Transfer_Stocks])。

春天mvc代码

@Override
    @Transactional
    public int transferStocks(List<ProductStocks> stocksList) throws Exception{
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
        String json = gson.toJson(stocksList);
        SimpleJdbcCall jdbcCall = new SimpleJdbcCall(template.getDataSource()).withProcedureName("Transfer_Stocks");
        SqlParameterSource in = new MapSqlParameterSource().addValue("stksArr", json);
        Map<String, Object> out = jdbcCall.execute(in);
        return (Integer) out.get("result");
       
    }

我也试过 .withCatlogName("schema1")。但问题仍然存在。我在某个地方出错了吗?请指导我。

Mysql 连接器

<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />  
<!-- erpho -->
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  
<property name="url" value="jdbc:mysql://<ip>:3306/schema1?useSSL=false"></property>  
<property name="username" value="*****"></property>  
<property name="password" value="***"></property>  
</bean>

标签: mysqlspring-mvc

解决方案


推荐阅读