我想使用createNativeQuery
创建多个表,但它会导致hibernate只创建第一个表。如果我将SQL粘贴到SQL编辑器,它可以正常工作。这是我的代码:
String sql = "CREATE TABLE \"languages\"("+
"language_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+
"language_name VARCHAR(50) NOT NULL,"+
"language_code VARCHAR(3) NOT NULL);"+
"CREATE TABLE \"accountant\"("+
"accountant_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+
"name VARCHAR(50) NOT NULL,"+
"surname VARCHAR(50) NOT NULL,"+
"mail VARCHAR(100) NOT NULL,"+
"avatar VARCHAR(150),"+
"phone VARCHAR(16),"+
"interface_lang_id INTEGER NOT NULL,"+
"FOREIGN KEY(interface_lang_id) REFERENCES languages(language_id) ON DELETE RESTRICT);"+
"CREATE TABLE \"currency\"("+
"currency_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+
"name VARCHAR(25) NOT NULL,"+
"symbol VARCHAR(5) NOT NULL);";
session.createNativeQuery(sql).executeUpdate();
答案 0 :(得分:1)
拆分3创建查询并执行session.createNativeQuery(sql).executeUpdate();
3次创建查询。您已经编写了3个查询来执行同一时间。这里是createNativeQuery
方法,在执行1st create语句后,它的光标移动到下一行代码。所以我认为这是可能发生的问题。
另一种方法是,您可以在服务器启动时自动创建表。为3表创建bean,将所有必需的注释放入bean中。然后将hibernate.cfg.xml文件更改为<property name="hbm2ddl.auto">create</property>
,然后在服务器启动时创建表
答案 1 :(得分:1)
createNativeQuery()用于执行单个本机SQL语句,而不是连续多个SQL语句。
在您的情况下,您尝试使用相同的调用执行3个不同的查询,以及在创建第一个表后导致其停止的内容。
如果您选中 documentation ,则说明:
查询createNativeQuery(String sqlString)
创建Query实例以执行本机SQL语句, 例如,用于更新或删除。
<强>解决方案:强>
您需要在不同的createNativeQuery
调用中分隔这3个查询,以便可以单独解释它们。