Java 使用Hibernate在PostgreSQL中创建模式
我只想在Hibernate SessionFactory初始化后在PostgreSQL server上执行以下SQL:Java 使用Hibernate在PostgreSQL中创建模式,java,sql,hibernate,postgresql,Java,Sql,Hibernate,Postgresql,我只想在Hibernate SessionFactory初始化后在PostgreSQL server上执行以下SQL: CREATE SCHEMA IF NOT EXISTS "fooschema" AUTHORIZATION "foouser"; 目前我正在使用以下例程: Session s = factory.withOptions().openSession(); SQLQuery query = s.createSQLQuery(sql); int res =
CREATE SCHEMA IF NOT EXISTS "fooschema" AUTHORIZATION "foouser";
目前我正在使用以下例程:
Session s = factory.withOptions().openSession();
SQLQuery query = s.createSQLQuery(sql);
int res = query.executeUpdate();
// res is 0 and the schema has NOT been created
s.flush();
s.disconnect();
s.close();
连接的用户具有创建新模式的权限。这是一个简单的问题:
我做错了什么
附件:
启用hibernate show_sql将打印以下内容:
Hibernate:
CREATE SCHEMA IF NOT EXISTS "fooschema" AUTHORIZATION "foouser";
尝试设置属性
<property name="hbm2ddl.auto" value="create"/>
在hibernate配置中我的问题的解决方案(感谢@a\u horse\u和\u no\u name)
错误消息是什么?顺便说一句:这样的事情最好使用正确的(版本化的!)DDL脚本来完成。没有错误消息。我没有看到提交。也许这就是问题所在?如果您已经在使用Liquibase,为什么不将其放入Liquibase更改集中?@a_horse_和_no_name我认为创建模式无法还原(它会立即执行),所以提交是必需的您是对的。。。解决方案是将查询放入事务中。这是否也会创建模式?我想它只会创建表。我没有使用hbm2ddl.auto。我只是想为liquibase创建模式,它实际上创建了表。@vralfy您能将hibernate.show_sql设置为true并显示在执行此sql时记录到控制台的内容吗?@smajlo附加了它above@vralfy这很愚蠢,因为可能已经创建了模式,所以这就是为什么您得到0作为回报?
Session s = factory.withOptions().openSession();
Transaction tx = s.beginTransaction();
SQLQuery query = s.createSQLQuery(sql);
int res = query.executeUpdate();
tx.commit();