java JPA2/Hibernate动态创建模式(即不手动预创建模式)?
我在Hibernate Entity Manager 3.6.4中使用JPA 2。一旦我用各种注释(@Entity
,@MappedSuperClass
等)标记了我的实体,我就把它们放在持久性中。xml文件使用的默认模式(hibernate.default_schema
属性)
我知道可以自动创建模式中包含的对象
但是,有可能自动创建模式本身,然后创建它包含的对象吗
编辑:
我也使用这个参数:hibernate.hbm2ddl.auto
,如果架构还不存在,就告诉Hibernate创建它。不走运,不是冬眠造成的
# 1 楼答案
我在谷歌上搜索了一下,找到了这个帖子:Hibernate hbm2ddl won't create schema before creating tables
Hibernate在创建表之前不创建模式的事实是bug。其他数据库也会遇到这种情况:H2、Postgresql等
This bug计划在Hibernate的5.0.0版本中修复
因此,目前唯一的解决方法是自己创建模式,可以手动创建,也可以通过数据库供应商提供的方法创建,因为Hibernate本身无法做到:
# 2 楼答案
我设法构建了一个使用hbm2ddl默认流的变通方法
由于它总是在创建模式之前调用“database object”drop语句,因此可以执行以下操作:
不幸的是,create子句是强制性的,不幸的是,它只在模式创建之后执行,无论您将其放在cfg上的顺序如何。xml,所以我将其设置为空,这样您就不会在再次尝试创建模式时出错(它已与drop一起创建)