gpt4 book ai didi

带破折号的 MySQL 模式名称导致 Hibernate hbm2ddl.auto 错误

转载 作者:行者123 更新时间:2023-11-30 21:56:38 25 4
gpt4 key购买 nike

我在开发环境中使用 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 引入了这种行为,以及是否有什么可以避免的。

非常欢迎任何帮助。

最佳答案

要保持 Hibernate 5.2+,您必须禁用方言中的 shema 限定符:

@Override
public NameQualifierSupport getNameQualifierSupport() {
return NameQualifierSupport.NONE;
}

示例方言 there .还要确保使用只能看到目标数据库的特定用户:不要使用“root”。 Hibernate 从所有数据库中获取所有可见表,即使与您指定的表不同。

关于带破折号的 MySQL 模式名称导致 Hibernate hbm2ddl.auto 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44924930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com