【问题标题】:Using Hibernate to CREATE SCHEMA in PostgreSQL使用 Hibernate 在 PostgreSQL 中创建 SCHEMA
【发布时间】:2013-11-15 12:19:12
【问题描述】:

我只想在我的 Hibernate SessionFactory 初始化后在我的 PostgreSQL 服务器上执行以下 SQL:

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";

【问题讨论】:

  • 错误信息是什么?顺便说一句:这样的事情最好使用正确的(版本化!)DDL 脚本来完成。
  • 没有错误信息。
  • 我没有在其中看到提交。也许这就是问题所在?如果您已经在使用 Liquibase,为什么不将其放入 liquibase 更改集中?
  • @a_horse_with_no_name 我认为创建模式无法恢复(它立即执行)所以提交是必要的
  • 你是对的......解决方案是将查询放在事务中。

标签: java sql hibernate postgresql


【解决方案1】:

尝试设置属性

 <property name="hbm2ddl.auto" value="create"/>

在休眠配置中

【讨论】:

  • 这是否也创建了 schema?我虽然它只会创建表格。
  • 我没有使用 hbm2ddl.auto。我只是想为 liquibase 创建架构,它实际上创建了表。
  • @vralfy 你能把 hibernate.show_sql 设为 true 并在你执行这个 sql 时显示记录到控制台的内容吗?
  • @smajlo 附在上面
  • @vralfy 它的愚蠢可能已经创建了架构,所以这就是为什么你得到 0 作为回报?
【解决方案2】:

我的问题的解决方案(感谢@a_horse_with_no_name)

Session s      = factory.withOptions().openSession();
Transaction tx = s.beginTransaction();
SQLQuery query = s.createSQLQuery(sql);
int res        = query.executeUpdate();
tx.commit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 2017-10-24
    • 2017-11-15
    • 2016-10-21
    • 1970-01-01
    • 2016-05-26
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多