升级到ColdFusion 2018 / Hibernate 5.2后生成的无效DDL

时间:2018-12-19 17:19:16

标签: hibernate orm coldfusion coldfusion-2018

我们在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'附近语法不正确。”)名称“组”)。但是,在接下来的两行中,它正确地引用了表名,并且没有用数据库名来限定它们。

我知道有人会说,我们的表名中不应包含点,也不应为关键字命名表。注意,但是最重要的是,我们这样做了,已经这样做了好多年没有问题,而且如果处理得当,它们是有效的名称。

还有其他人有类似的问题吗?我们想知道是否缺少一些新的配置设置来控制此行为,或者是否存在其他方法来强制ColdFusion / Hibernate像以前那样运行。另一种方法是更改​​数据库和表名,并通过代码搜寻所有对旧名称的直接引用,但是,实际上,真的不想这样做。

0 个答案:

没有答案