我们遇到了 ColdFusion 2018 和/或 Hibernate 5.2 的问题。
我们有一系列模型,在 ColdFusion 2016 中生成 DDL 时没有问题,但在 ColdFusion 2018 中失败。我们不确定哪个(ColdFusion 或 Hibernate)最终对我们看到的问题负责。
有几个问题:
- 数据库默认值不再起作用
- 字符串默认值不再正确引用。
- 这个:
property name="CompanyName" fieldtype="column" ormtype="string" default="Acme Inc." dbdefault="Acme Inc.";
- 结果表中的此语句创建:(
CompanyName varchar(255) default Acme Inc.
缺少引号)
- 数据库名称不再正确引用
- 我们有名为“prefix.databasename”的数据库(带点)
- 这些用于查找但现在在 CF2018 中会导致错误,例如“对象名称 'prefix.databasename.dbo.SomeTable 包含的前缀数量超过了最大数量。最大值为 2。”
- 表名不再正确引用
- 令人沮丧的是,它们有时被正确引用,有时不被正确引用。以下内容来自休眠日志:
HIBERNATE DEBUG - alter table my_db.dbo.Group add DeletedByID int HIBERNATE DEBUG - alter table my_db.dbo.User add DeletedByID int HIBERNATE DEBUG - alter table [Group] add constraint FKfpa9ddoqu39xeskmmdg2pe3tq foreign key (DeletedByID) references [User] HIBERNATE DEBUG - alter table [User] add constraint FKj4hy4k4el0vvds8s8itfo2b04 foreign key (DeletedByID) references [User]
- 在前两行中,请注意数据库名称和表名称都没有被正确引用(导致错误“通过 JDBC 语句执行 DDL 时出错 - 关键字 'Group' 附近的语法不正确。”因为它阻塞了表名“Group” ")。但是,在接下来的两行中,它正确引用了表名,并且没有用数据库名限定它们......
- 令人沮丧的是,它们有时被正确引用,有时不被正确引用。以下内容来自休眠日志:
我知道有人会权衡并说我们的表名中不应该有圆点,也不应该有以关键字命名的表。注意到,但底线是我们这样做了,多年来一直没有问题,如果处理得当,它们是有效的名称。
有没有其他人有类似的问题?我们想知道是否有一些我们缺少的新配置设置来控制此行为,或者是否有其他方法可以强制 ColdFusion/Hibernate 像以前一样运行。另一种方法是更改数据库和表名称,并通过代码寻找对旧名称的任何直接引用,但实际上,真的不想这样做。