MySQL和Hibernate启动时导入存储过程

时间:2014-03-16 18:24:43

标签: mysql sql hibernate file import

我想在运行我的java程序时更新所有的SP(如果它不是好的做法并不重要)。 由于我使用的是Hibernate 4.3.2.Final,我试图避免为MySQL编写自己的SQL执行器。 所以我试图在我的hibernate.cfg.xml中使用hibernate.hbm2ddl.import_files。 它得到了脚本,但它无法解析它。我试过

    <property name="hibernate.hbm2ddl.import_files">/Database/stored_procedures/load.sql</property>
    <property name="hibernate.hbm2ddl.import_files_sql_extractor">org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor</property>

但我得到

org.hibernate.tool.hbm2ddl.ImportScriptException: Error during statement execution (file: '/Database/stored_procedures/load.sql'): DELIMITER $$ 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'DELIMITER $$ 

SP sql文件在MySQL上运行良好(尝试多次),它类似于:

DROP PROCEDURE IF EXISTS ebull.`load_friends`;

DELIMITER $$ 

CREATE PROCEDURE ebull.`load_friends`(
    IN transactionId BIGINT,
    IN chunk INT
)
BEGIN
    ...sql queries and stuff....

END

$$
DELIMITER ;

我认为分隔符有问题,但我不知道如何避免它们,因为它是存储过程定义。 我开始认为这是不可能的。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在Java中,您无需在SQL脚本中使用基于Delimiter的语法来创建存储过程。修改您的SQL脚本文件以删除DELIMITER ...部分并从JAVA运行其余的过程代码。

参考Creating Stored Procedure in MySQL with SQL Scripts or JDBC API