JPA2 / Hibernate - 动态创建架构(即不手动预先创建架构)?

时间:2011-08-02 15:23:34

标签: java hibernate jpa

我将JPA 2与Hibernate Entity Manager 3.6.4一起使用。在我使用各种注释(@Entity@MappedSuperClass等)标记我的实体后,我在persistence.xml文件中输入了要使用的默认架构(hibernate.default_schema属性)。

我知道可以自动创建架构中包含的对象 但是,是否可以自动创建模式本身,然后创建它包含的对象?

编辑:
我也使用这个参数:hibernate.hbm2ddl.auto,告诉Hibernate如果它还不存在则创建模式。没有运气,Hibernate没有创造它!

2 个答案:

答案 0 :(得分:3)

我搜索了一下,发现这篇文章:Hibernate hbm2ddl won't create schema before creating tables

Hibernate在创建表之前不创建模式的事实是bug。其他数据库遇到这种情况:H2,Postgresql等。

计划使用5.0.0版本的Hibernate修复

This bug

所以,目前,唯一的解决方法是自己创建架构,手动或由数据库供应商提供的平均值,因为Hibernate不能自己做:\

答案 1 :(得分:1)

我设法构建了一个使用hbm2ddl默认流的解决方法。

因为它在创建模式之前总是调用“database-object”drop语句,所以你可以这样做:

<database-object>
    <create></create>
    <drop>DROP SCHEMA IF EXISTS myschema cascade; CREATE SCHEMA myschema</drop>
</database-object>

不幸的是,create子句是强制性的,遗憾的是它只在模式创建后执行,无论你把它放在cfg.xml上的顺序如何,所以我把它变为空,这样你就没有尝试再次创建模式的错误(它已经与drop)一起创建了