当hibernate.hbm2ddl.auto设置为CREATE时,如果postgresql需要,如何让hibernate执行CREATE DATABASE

当hibernate.hbm2ddl.auto设置为CREATE时,如果postgresql需要,如何让hibernate执行CREATE DATABASE,hibernate,postgresql,hbm2ddl,Hibernate,Postgresql,Hbm2ddl,我正在使用,并使一个网站。我们正在使用内存数据库HyperSonic,但我正在尝试切换到 如果我用这个,一切都会好的。唯一的问题是我必须在hibernate之外单独执行CREATE DATABASE语句,然后才能通过[hibernate.hbm2ddl.auto]创建表(http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-可选)设置为创建。如果需要,

我正在使用,并使一个网站。我们正在使用内存数据库HyperSonic,但我正在尝试切换到


如果我用这个,一切都会好的。唯一的问题是我必须在hibernate之外单独执行
CREATE DATABASE
语句,然后才能通过
[hibernate.hbm2ddl.auto]创建表(http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-可选)
设置为创建。如果需要,我可以设置另一个选项,让hibernate创建数据库。

。您必须使用模板数据库(通常为
template1
)创建数据库。事件的正常顺序是:

  • 连接到
    模板1
    数据库
  • 执行
    CREATE DATABASE
    newdb
  • 重新连接到新数据库
  • 开始发出
    DDL
    语句

  • 如果您对更多信息感兴趣,请查看PostgreSQL如何完成
    创建数据库
    的详细信息,您将了解原因。

    Sean,我了解PostgreSQL使用template1作为模型数据库,因为SQL Server使用名为model的数据库。但是,我无法理解,如果配置文件中提供的用户名和密码具有相应的权限,为什么不能将hibernate配置为执行相同的操作。出于安全原因,我不会在生产数据库上这样做,但这是一个不同的讨论。啊!我当时误解了你的问题,我不确定。我的猜测是,因为必须更改数据库,所以需要不同的JDBC连接才能清除任何可能缓存的JDBC信息。
    template1
    没有任何神奇之处,因此JDBC驱动程序可以很好地过滤掉可能过时的模式信息。除此之外,我将不得不假装无知。Hibernate的问题是,它是为服务器应用程序开发的,在服务器应用程序中,您希望数据库管理员通过手动(或通过脚本)创建数据库来弄脏他的手。事实上,我在java桌面应用程序中使用Postgresql,遇到了同样的问题。