Неверный синтаксис рядом с ',' при выполнении SQL-запроса в Spring JPA, но успешно выполняется в базе данных

Я использую Java 8 и имею запрос на обновление с тремя столбцами, объединенными в один в предложенииwhere. запрос отлично работает на SQL Server, но когда я выполняю его из кода, это приводит к неправильной синтаксической ошибке.

Запрос, используемый в коде:

@Modifying
@Transactional
@Query(value = "UPDATE ListView SET stre_group = :streGroup, method = :mthodSelected, " +
                "alloc_schedule = :allocationSchedule " +
                "WHERE concat(job_id,':',item_nr,':',whse_nr) IN (:resultValue)", nativeQuery = true)
void updateWorklist(String streGroup, String mthodSelected,
                                    List<String> allocationSchedule ,
                                    List<String> resultValue);

БД:

UPDATE tablename  SET stre_group = 'store 4', method = 'store 4',
auto_alloc_action = 'store 4', alloc_schedule = 'store 4'
WHERE concat(job_id,':',item_nbr,':',whse_nbr) IN ('1:10:1')

Я попытался проверить синтаксис и не нашел причины проблемы.

ОШИБКА o.h.engine.jdbc.spi.SqlExceptionHelper: неверный синтаксис рядом с ','.
? ОШИБКА 29524 i.m.ca.service.updateDataService: произошла ошибка при обновлении записей: не удалось выполнить оператор; SQL [н/д]; вложенное исключение: org.hibernate.Exception.SQLGrammarException: не удалось выполнить оператор.

К вашему сведению, вы можете включить ведение журнала запросов и посмотреть, что это за запрос.

Federico klez Culloca 04.07.2024 17:15

@FedericoklezCulloca: Я включил ведение журнала, оно печатается следующим образом: Hibernate: UPDATE ListView SET stre_group = ?, метод = ?, alloc_schedule = ? ГДЕ concat(job_id,':',item_nr,':',whse_nr) IN ( ? )

sharonm 04.07.2024 17:37

item_nbr и whse_nbr в вашем SQL-запросе пишутся по-разному, чем в строке, где вы пишете их как item_nr и whse_nr.

SledgeHammer 04.07.2024 17:40

Вкратце alloc_schedule = :allocationSchedule пока вы передаете ему список: List<String> allocationSchedule то, что выполняет база данных, не совсем то, что происходит в приложении.

Jorge Campos 04.07.2024 17:41

Они не вызовут синтаксическую ошибку SQL, @SledgeHammer , но все же имеют смысл.

Thom A 04.07.2024 17:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваша проблема возникает из-за того, что один из параметров, передаваемых в запрос, имеет тип List, а в запросе вы используете знак равенства =. Причина, по которой он работает в базе данных, заключается в том, что вы не используете тот же самый параметр в приложении.

По сути, эта часть запроса: alloc_schedule = :allocationSchedule

Поскольку параметр равен List<String> allocationSchedule, окончательный выполняемый запрос будет выглядеть примерно так:

UPDATE ...., alloc_schedule = 'store 4', 'SomeOtherValueInTheList' WHERE ...

Отсюда и ошибка: SqlExceptionHelper : Incorrect syntax near ','.

Поэтому вам нужно исправить параметр, чтобы он представлял собой простую строку (и, очевидно, вызывающие этот метод)

Спасибо. Исправлен параметр, все работает нормально.

sharonm 05.07.2024 08:59

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