Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA2/Hibernate-动态创建模式(即不手动预创建模式)?_Java_Hibernate_Jpa - Fatal编程技术网

Java JPA2/Hibernate-动态创建模式(即不手动预创建模式)?

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如果架构还不存在,就

我将JPA2与Hibernate Entity Manager 3.6.4一起使用。一旦我用各种注释(
@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一起创建)