使用JPA Hibernate创建MySQL存储过程

use*_*212 0 java mysql hibernate jpa

我正在尝试使用文本文件的内容在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 ;
Run Code Online (Sandbox Code Playgroud)

我使用本机查询执行SQL:

Query query = entityManager.createNativeQuery(queryText);
...
query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

但是它在DROP PROCEDURE上出错,我注释掉了DROP PROCEDURE,然后在DELIMITER上出错,基本上,在第一个分号之后的任何行都出错了。

似乎JPA休眠正在解析我的查询并告诉我它有问题,而不是将纯文本传递给MySQL。

sql在MySQL中运行时没有错误。

我在Google中找不到关于使用JPA创建存储过程的任何信息,仅调用了一个。

有人对我可能做错的事情有任何见解吗?或者,即使有可能。

use*_*019 5

如果您在url中提到以下属性,则有可能

spring.datasource.url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)