2013-03-09 57 views
0

我想使用Hibernate从文件运行本机SQL。 SQL可以包含几条创建数据库结构的语句(即表,约束但不包含insert/update/delete语句)。休眠多个本机SQL语句

例子,非常简单的查询低于(包含以下两个SQL语句)

CREATE DATABASE test; 
CREATE TABLE test.testtbl(id int(5)); 

我使用的MySQL数据库,当我跑我gettng语法错误上面的查询返回。当我一个接一个地运行它时,它就OK了。

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 
'CREATE TABLE test.testtbl(id int(5))' at line 1 

该代码以运行查询低于(上面的语句被分配给“SQL”变量):

session = sf.openSession(); 
session.beginTransaction(); 
Query qry = session.createSQLQuery(sql); 
qry.executeUpdate(); 
session.getTransaction().commit(); 

任何帮助,将不胜感激。

+3

您需要逐个运行它们,这就是JDBC的工作原理。 – 2013-03-09 15:58:32

回答

1

正如其他人已经解释
您必须逐个运行这些查询。
hibernate代码被转换为在JDBC上运行一个更新语句。
但是你提供了两个更新语句。
另外,
我个人更喜欢在一些数据库脚本中使用在Java应用程序之外创建表的代码。

0

createSQLQuery方法的参数是t-sql代码; t-sql代码确保在mysql界面分析器中正确。 您可以尝试更改sql:'CREATE TABLE testtbl(id int(5));' 顺便说一下,你可以使用JDBC Connection API(不建议这样做) 如: java.sql.Connection conn = session.connection();