我将JPA 2与Hibernate Entity Manager 3.6.4一起使用。在我使用各种注释(@Entity
,@MappedSuperClass
等)标记我的实体后,我在persistence.xml文件中输入了要使用的默认架构(hibernate.default_schema
属性)。
我知道可以自动创建架构中包含的对象 但是,是否可以自动创建模式本身,然后创建它包含的对象?
编辑:
我也使用这个参数:hibernate.hbm2ddl.auto
,告诉Hibernate如果它还不存在则创建模式。没有运气,Hibernate没有创造它!
答案 0 :(得分:3)
我搜索了一下,发现这篇文章:Hibernate hbm2ddl won't create schema before creating tables。
Hibernate在创建表之前不创建模式的事实是bug。其他数据库遇到这种情况:H2,Postgresql等。
计划使用5.0.0版本的Hibernate修复所以,目前,唯一的解决方法是自己创建架构,手动或由数据库供应商提供的平均值,因为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)一起创建了