2013-03-09 39 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();