я получил синтаксическую ошибку hibernate SQL с использованием собственного запроса в аннотации запроса (но этот синтаксис работает в консоли) * отредактировано

#java #mysql #hibernate #jpa

Вопрос:

прежде всего, я использую (mysql 5.7, jdk1,8, весенняя загрузка)

 @Transactional
@Modifying
@Query(value= "set @COUNT = 0; n" 
        "UPDATE faq f SET f.id= @COUNT\:=@COUNT 1 WHERE f.id LIKE '%';", nativeQuery = true)
void update();
 

сообщение консоли (сообщение об ошибке гибернации) является

 Hibernate: set @COUNT = 0; 
UPDATE faq f SET f.id= @COUNT:=@COUNT 1 WHERE f.id LIKE '%'; 
(error maessage)
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE faq f SET f.id= @COUNT:=@COUNT 1 WHERE f.id LIKE '%'' at line 2
 

но этот запрос хорошо работает в консоли mysql

 set @COUNT = 0; UPDATE faq SET id = @COUNT:=@COUNT 1 WHERE f.id like '%';
 

пожалуйста, помогите мне… Я искал и пробовал множество решений, но ничего не получалось

     ... UPDATE faq f SET f.id= @COUNT\:=@COUNT 1 WHERE f.id LIKE '%';" ...)
    ... UPDATE faq f SET f.id= @COUNT|=@COUNT 1 WHERE f.id LIKE '%';" ...)
    ... UPDATE faq f SET f.id= @COUNT\:=@COUNT 1 ;" ...)
    ... UPDATE faq f SET f.id= @COUNT\:=(@COUNT 1) ;" ...)
    ... (UPDATE faq f SET f.id= @COUNT\:=@COUNT 1 ;)" ...)
 

Комментарии:

1. @COUNT:=@COUNT 1 id обратите внимание на удостоверение личности!!! Его там быть не должно

2. действительно извините, была опечатка в обработке вопросов для публикации! Я исправил это, и программа все еще выдает ошибку ( ~ ГДЕ ~ -> идентификатор удален), Спасибо, что посмотрели мое беспокойство

3. Вы пытаетесь выполнить 2 запроса одновременно. set @COUNT = 0; это первое. Вы не можете этого сделать. Вы можете объединить эти запросы, инициализировав @count в запросе на обновление. Но на самом деле то, что вы делаете, странно. В первую очередь вам не следует возиться со столбцом идентификатора.

4. как их совместить ?? я попробовал update faq f set @COUNT:=0, f.id = @COUNT:=(@COUNT 1) ; (это не сработало также в консоли ) на самом деле я собираюсь использовать идентификатор для индексирования типа «1. контент, 2. контент»..

Ответ №1:

Вы пытаетесь выполнить 2 запроса одновременно. Это не работает. Вы можете объединить эти запросы, инициализировав @count в запросе обновления следующим образом:

 UPDATE faq f 
JOIN (SELECT @count := 0) cnt
SET f.id = @COUNT := @COUNT   1 
WHERE f.id LIKE '%'
 

Демонстрация SQLFiddle

Комментарии:

1. наконец-то эти коды сработали! спасибо за помощь и удачной недели, братан 🙂