Java JPA2/Hibernate-动态创建模式(即不手动预创建模式)?
我将JPA2与Hibernate Entity Manager 3.6.4一起使用。一旦我用各种注释(Java JPA2/Hibernate-动态创建模式(即不手动预创建模式)?,java,hibernate,jpa,Java,Hibernate,Jpa,我将JPA2与Hibernate Entity Manager 3.6.4一起使用。一旦我用各种注释(@Entity,@MappedSuperClass等)标记了我的实体,我就在persistence.xml文件中放入要使用的默认模式(hibernate.default_schema属性) 我知道可以自动创建架构中包含的对象。 但是,是否可以自动创建模式本身,然后创建它所包含的对象 编辑: 我也使用这个参数:hibernate.hbm2ddl.auto,告诉hibernate如果架构还不存在,就
@Entity
,@MappedSuperClass
等)标记了我的实体,我就在persistence.xml文件中放入要使用的默认模式(hibernate.default_schema
属性)
我知道可以自动创建架构中包含的对象。但是,是否可以自动创建模式本身,然后创建它所包含的对象 编辑:
我也使用这个参数:
hibernate.hbm2ddl.auto
,告诉hibernate如果架构还不存在,就创建它。不走运,不是冬眠造成的 我在谷歌上搜索了一下,发现了以下帖子:
Hibernate在创建表之前不创建模式这一事实是一个错误。其他数据库也会遇到这种情况:H2、Postgresql等
计划在Hibernate的5.0.0版本中修复
因此,目前唯一的解决办法是自己创建模式,可以手动创建,也可以通过数据库供应商提供的方法创建,因为Hibernate本身无法做到这一点:\我在谷歌上搜索了一下,发现这篇文章: Hibernate在创建表之前不创建模式这一事实是一个错误。其他数据库也会遇到这种情况:H2、Postgresql等 计划在Hibernate的5.0.0版本中修复
因此,目前唯一的解决办法是自己创建模式,可以手动创建,也可以通过数据库供应商提供的方法创建,因为Hibernate本身无法做到这一点:\我设法构建了一个使用hbm2ddl默认流的解决办法 由于它总是在创建架构之前调用“database object”drop语句,因此可以执行以下操作:
<database-object>
<create></create>
<drop>DROP SCHEMA IF EXISTS myschema cascade; CREATE SCHEMA myschema</drop>
</database-object>
如果存在myschema级联,则删除SCHEMA;创建模式myschema
不幸的是,create子句是强制性的,不幸的是,它只在模式创建之后执行,不管您将它放在cfg.xml上的顺序如何,所以我将它设为空,这样您在尝试再次创建模式时就不会出错(它已经与drop一起创建)我设法构建了一个使用hbm2ddl默认流的变通方法 由于它总是在创建架构之前调用“database object”drop语句,因此可以执行以下操作:
<database-object>
<create></create>
<drop>DROP SCHEMA IF EXISTS myschema cascade; CREATE SCHEMA myschema</drop>
</database-object>
如果存在myschema级联,则删除SCHEMA;创建模式myschema
不幸的是,create子句是强制性的,不幸的是,它只在模式创建之后执行,不管您将它放在cfg.xml上的顺序如何,所以我将它设为空,这样您在尝试再次创建模式时就不会出错(它已经与drop一起创建)