在单元测试之前初始化DB的SQL语法错误

时间:2015-08-06 14:19:31

标签: java mysql hibernate

我已经创建了一个.sql来准备我的数据库进行测试。

这里是生成错误的.sql的一部分:

DROP TABLE IF EXISTS announcement;
CREATE TABLE announcement (
   id int(11) NOT NULL AUTO_INCREMENT,
   date datetime DEFAULT NULL,
   title varchar(255) DEFAULT NULL,
   content mediumtext,
   PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

LOCK TABLES announcement WRITE;
INSERT INTO announcement VALUES (1,'2015-07-29 10:59:16','Test Anno ','some text');
UNLOCK TABLES;

在Mysql Workbench中执行时,这个scipt工作正常。

但是当通过hibernate执行时:

String sqlScript = readFile("dump.sql", Charset.forName("UTF8"));
//System.err.println(sqlScript);
Query q = em.createNativeQuery("BEGIN " + sqlScript + "END;");
q.executeUpdate();

我明白了:

2015-08-06 16:15:55 ERROR SqlExceptionHelper:146 - 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 'DROP TABLE IF EXISTS announcement;
CREATE TABLE announcement (
  id int(11) NO' at line 1

我正在使用:

Properties jpaProperties = new Properties();
jpaProperties.put("hibernate.dialect","org.hibernate.dialect.MySQL5Dialect");
jpaProperties.put("hibernate.enable_lazy_load_no_trans", true);

有人可以帮助我吗? 感谢。

1 个答案:

答案 0 :(得分:0)

正如mustaccio所述BEGINEND语句不允许在存储过程之外。请参阅:Hibernate multiple native SQL statements