Создание хранимой процедуры MySQL с использованием JPA Hibernate - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь создать хранимую процедуру в базе данных MySQL, используя содержимое текстового файла:

USE myDatabase;

DROP PROCEDURE IF EXISTS myStoredProcedure;

DELIMITER $$

CREATE PROCEDURE myStoredProcedure
(
    _description VARCHAR(50),
    _value INT
)
BEGIN

    INSERT INTO myTable
    (
        description,
        value
    ) VALUES (
        _description,
        _value
    );

    SELECT 
        id, 
        description, 
        value
    FROM myTable
    WHERE id = LAST_INSERT_ID();

END;

$$

DELIMITER ;

Я выполняю SQL, используя собственный запрос:

Query query = entityManager.createNativeQuery(queryText);
...
query.executeUpdate();

Но он получает сообщение об ошибке DROP PROCEDURE. Я закомментировал DROP PROCEDURE, а затем он получает сообщение об ошибке DELIMITER. В основном, он получает ошибку в любой строке после первой точки с запятой.

Кажется, что JPAhibernate анализирует мой запрос и говорит, что с ним проблема, а не передача неизмененного текста в MySQL.

sql работает в MySQL без ошибок.

Я не могу найти ничего в Googleо создании хранимой процедуры с использованием JPA, вызов только одной.

Кто-нибудь знает, что я могу делать неправильно?Или, если это вообще возможно.

1 Ответ

5 голосов
/ 06 июня 2019

Это может быть возможно, если вы упомянули следующее свойство в URL

spring.datasource.url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true

allowMultiQueries будет указывать драйверу отправлять запросы с разделителями в базу данных.

Обратите внимание: если вы используете нативные запросы, помните о внедрении SQL-инъекций. Вам не нужно явно указывать разделитель (DELIMITER). Оператор sql Следующий запрос работает

SET myDatabase; 

DROP PROCEDURE IF EXISTS myStoredProcedure; 

CREATE PROCEDURE myStoredProcedure ( _description VARCHAR(50), _value INT ) 

BEGIN 

INSERT INTO 
    myTable ( description, value ) 
VALUES ( _description, _value ); 

SELECT id, description, value 
  FROM myTable 
WHERE id = LAST_INSERT_ID(); 

END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...