Ошибка jdbc Spring 6. Невозможно определить правильную сигнатуру вызова. Имя для аргумента типа [java.lang.String] не указано

Я переношу свой проект с Spring 5 на Spring 6 и Spring Boot 2 на 3. в настоящее время я использую версию 6.4.0.jre8 для версии mssql-jdbc

<groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>6.4.0.jre8</version>

когда я запускаю приложение, я получаю ошибку базы данных ниже в запросе ниже.

    SimpleJdbcCall procedure = new SimpleJdbcCall(namedJdbcTemplate.getJdbcTemplate())
.withProcedureName(procedureName).returningResultSet(QueryParameterConstants.P_RESULTSET, rowMapper);
                procedure.compile();

ошибка, как показано ниже:

org.springframework.dao.InvalidDataAccessApiUsageException: Unable to determine the correct call signature - no procedure/function/signature for 'getUsersRole'
    at org.springframework.jdbc.core.metadata.GenericCallMetaDataProvider.processProcedureColumns(GenericCallMetaDataProvider.java:365) ~[spring-jdbc-6.1.3.jar:6.1.3]
    at org.springframework.jdbc.core.metadata.GenericCallMetaDataProvider.initializeWithProcedureColumnMetaData(GenericCallMetaDataProvider.java:119) ~[spring-jdbc-6.1.3.jar:6.1.3]
    at org.springframework.jdbc.core.metadata.CallMetaDataProviderFactory.lambda$createMetaDataProvider$0(CallMetaDataProviderFactory.java:133) ~[spring-jdbc-6.1.3.jar:6.1.3]
    at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:354) ~[spring-jdbc-6.1.3.jar:6.1.3]
    at org.springframework.jdbc.core.metadata.CallMetaDataProviderFactory.createMetaDataProvider(CallMetaDataProviderFactory.java:89) ~[spring-jdbc-6.1.3.jar:6.1.3]

вторая ошибка:

paramMap.put(USER_ID, userId);//As userId is Integer

Исключение:

java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.
    at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:185) ~[spring-web-6.1.3.jar:6.1.3]

Я не хочу изменять код, поскольку с Spring 5 он работает нормально.

Есть ли другой способ устранить эти ошибки.

см. руководство по миграции на Spring 6.x # Сохранение имени параметра: github.com/spring-projects/spring-framework/wiki/…

radistao 28.03.2024 15:37
0
1
233
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для исключения 1:

Unable to determine the correct call signature - no procedure/function/signature

это произошло потому, что моя БД не была подключена.

Для исключения 2:

java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.

Я обновил свой плагин компилятора maven с 2.5.1 до 3.11.0 и добавил тег параметров, как показано ниже:

<plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>3.11.0</version>
       <configuration>
         <parameters>true</parameters>
       </configuration>
 </plugin>

Другие вопросы по теме