Я переношу свой проект с 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 он работает нормально.
Есть ли другой способ устранить эти ошибки.
Для исключения 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>
см. руководство по миграции на Spring 6.x # Сохранение имени параметра: github.com/spring-projects/spring-framework/wiki/…