我在开发环境中使用hibernate.hbm2ddl.auto=update
,最近我将hibernate版本从5.1.0.Final升级到5.2.X.Final,我开始遇到hibernate自动生成的命令错误我的架构名为portal-appname
。
在hibernate 5.1.0中,当我为给定表添加一个新列时,执行以下命令:
Hibernate: alter table answer add column fake integer not null
但是在Hibernate 5.2.X中,架构被添加为给定表名的前缀:
Hibernate: alter table portal-appname.answer add column fake integer not null
这显然不是一个有效的sql命令:
MySQL server version for the right syntax to use near '-appname.answer add column fake integer not null' at line 1
Hibernate应将portal-appname.table与backtips自动封装为:
Hibernate: alter table `portal-appname`.`answer` add column fake integer not null
我尝试使用hibernate.globally_quoted_identifiers
,但它只引用列名但不引用portal-appname.table对。
有趣的是,hibernate 5.2.X只使用带有列名的语法,但它并没有在其他类型的更改中为模式添加前缀,例如:
Hibernate: alter table tablename add constraint FKftsiakun1f5qp01aabdw887kp foreign key (logo) references tablename2 (id)
最后但同样重要的是,我正处于能够将我的架构重命名为其他东西的那一刻。此外,我可以降级到hibernate 5.1.0,但我想知道为什么hibernate引入了这种行为,如果有什么可以避免它。
非常欢迎任何帮助。
答案 0 :(得分:0)
要保持Hibernate 5.2+,你必须禁用方言中的shema限定符:
void add2(Integer i, Double d1) {
Double d2= Double.valueOf((double) i.intValue() + d1.doubleValue());
}
示例方言there。 还要确保使用只能查看目标数据库的特定用户:不要使用“root”。 Hibernate从所有数据库中提取所有可见表,即使它与您指定的表不同。