有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在Hibernate Entity Manager 3.6.4中使用JPA 2。一旦我用各种注释(@Entity@MappedSuperClass等)标记了我的实体,我就把它们放在持久性中。xml文件使用的默认模式(hibernate.default_schema属性)

我知道可以自动创建模式中包含的对象
但是,有可能自动创建模式本身,然后创建它包含的对象吗

编辑:
我也使用这个参数:hibernate.hbm2ddl.auto,如果架构还不存在,就告诉Hibernate创建它。不走运,不是冬眠造成的


共 (2) 个答案

  1. # 1 楼答案

    我在谷歌上搜索了一下,找到了这个帖子:Hibernate hbm2ddl won't create schema before creating tables

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

    This bug计划在Hibernate的5.0.0版本中修复

    因此,目前唯一的解决方法是自己创建模式,可以手动创建,也可以通过数据库供应商提供的方法创建,因为Hibernate本身无法做到:

  2. # 2 楼答案

    我设法构建了一个使用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一起创建)