Почему mybatis жалуется на синтаксическую ошибку SQL при выполнении запроса? - PullRequest
0 голосов
/ 10 января 2020

У меня есть Mybatis mapper, который должен создать запись в таблице базы данных. Маппер определен ниже -

    <select id="saveUser" parameterType="User" resultMap="UserResultMap">
        DROP TEMPORARY TABLE IF EXISTS temp_role_id;
        CREATE TEMPORARY TABLE temp_role_id(id int);
        INSERT INTO temp_role_id VALUES
        <foreach collection="roles" item="role" separator=",">
            (${role.id})
        </foreach>;
        call insert_user_sp('${name}', '${username}', '${email}', '${password}');
    </select>

Хранимая процедура определена ниже -

DELIMITER //
CREATE PROCEDURE insert_user_sp(
  u_name VARCHAR(40),
  u_username VARCHAR(20),
  u_email VARCHAR(40),
  u_password VARCHAR(100)
)
BEGIN
  INSERT INTO users(name, username, email, password)
  VALUES(u_name, u_username, u_email, u_password);

  SET @v_user_id = last_insert_id();

  INSERT INTO user_roles(user_id, role_id)
    SELECT @v_user_id, id from temp_role_id;

  DROP TEMPORARY TABLE IF EXISTS temp_role_id;

  SELECT id, name, username, email, password, created_at, modified_at
    FROM users where id = @v_user_id;
END //

DELIMITER ;

Сообщение об ошибке, заданное mybatis, ниже -

### Error querying database.  Cause: 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 'CREATE TEMPORARY TABLE temp_role_id(id int);
        INSERT INTO temp_role_id VA' at line 2
### The error may exist in mybatis/mappers/UserMapper.xml
### The error may involve UserMapper.saveUser-Inline
### The error occurred while setting parameters
### SQL: DROP TEMPORARY TABLE IF EXISTS temp_role_id;         CREATE TEMPORARY TABLE temp_role_id(id int);         INSERT INTO temp_role_id VALUES                        (4)          ;         call insert_user_sp('Ujjal Das', 'ujjaldas223', 'ujjaldas223@gmail.com', '$2a$10$JlIb3BRXffYhMV8j9Wy2OuG2Wu53lGrHKexKspErzhi/JGwMhsvoO');

Но когда я выполняю тот же запрос в mysql, он выполняется успешно.

enter image description here

Если у mysql нет проблем с выполнением того же самого вопрос, почему mybatis жалуется на то же самое?

1 Ответ

0 голосов
/ 11 января 2020

Упс, это адский поиск.

Как указал @ Akina , jdb c mysql out не поддерживает мультизапросы.

В случае, если кто-то сталкивается с той же проблемой, взгляните на это решение .

...