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

升级到ColdFusion 2018/Hibernate 5.2后生成的DDL无效,hibernate,orm,coldfusion,coldfusion-2018,Hibernate,Orm,Coldfusion,Coldfusion 2018,ColdFusion 2018和/或Hibernate 5.2存在问题 我们有一系列模型,其DDL生成与ColdFusion 2016无关,但与ColdFusion 2018无关。我们不确定哪一个(ColdFusion或Hibernate)是我们看到的问题的最终原因 有几个问题: 数据库默认值不再工作 字符串默认值不再正确引用 这是:property name=“CompanyName”fieldtype=“column”或mtype=“string”default=“Acme Inc.”d

ColdFusion 2018和/或Hibernate 5.2存在问题

我们有一系列模型,其DDL生成与ColdFusion 2016无关,但与ColdFusion 2018无关。我们不确定哪一个(ColdFusion或Hibernate)是我们看到的问题的最终原因

有几个问题:

  • 数据库默认值不再工作
    • 字符串默认值不再正确引用
    • 这是:
      property name=“CompanyName”fieldtype=“column”或mtype=“string”default=“Acme Inc.”dbdefault=“Acme Inc.”
    • 表create中此语句的结果:
      CompanyName varchar(255)default Acme Inc.
      (缺少引号)
  • 数据库名称不再正确引用
    • 我们的数据库命名为“prefix.databasename”(带点)
    • 这些过去用于查找,但现在在CF2018中会导致错误,例如“对象名称”prefix.databasename.dbo.SomeTable包含的前缀数超过最大值。最大值为2。”
  • 表名不再正确引用
    • 令人沮丧的是,它们有时被正确引用,有时却没有。以下内容摘自hibernate日志:
      hibernate DEBUG-alter table my_db.dbo.Group add DeletedByID int
      HIBERNATE调试-更改表my_db.dbo.User添加DeletedByID int
      HIBERNATE调试-alter table[Group]添加约束FKfpa9ddoqu39xeskmmdg2pe3tq外键(DeletedByID)引用[User]
      HIBERNATE调试-alter table[User]添加约束FKj4hy4k4el0vvds8s8itfo2b04外键(DeletedByID)引用[User]
    • 在前两行中,请注意数据库名和表名都没有正确引用(导致错误“error executing DDL via JDBC Statement-关键字“Group.”附近的语法不正确”,因为它阻塞了表名“Group”)。但是,在接下来的两行中,它正确地引用了表名,并且没有用数据库名限定它们
我知道有人会加入进来,说我们的表名中不应该有点,也不应该有以关键字命名的表。注意到,但底线是我们确实这么做了,已经这么做多年没有问题,如果处理得当,它们是有效的名称


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

我将是一个考虑点和保留字的人。你看到的正是它最初被称为“坏主意”的原因,即使它在几年前确实有效。某些单词和句点在数据库中有意义。若事实是这样的,特别是在周期中,您可能会丢失数据库内置的功能,并且依赖数据库连接器来正确转换您的意图
prefix.databasename.dbo.SomeTable
意味着查看
prefix
服务器、
databasename
数据库、
dbo
模式和
SomeTable
表。CF2016可能正在对传递给Hibernate的值进行某种参数化,以便能够转义某些保留字,类似于
GROUP
,但它没有逃逸
my_db.dbo.GROUP
,因为它没有看到保留字。试着逃离你自己。在应该转义的db和列名周围放置
[]
。(我假设您使用的是SQL Server)。是的,我希望这是一个已知的解决问题。底线是,它过去是有效的,但在2018年金融危机中不再有效。我可以将代码中的每个引用更改为表,并更改所有DB名称,但正如我在问题中所述,我真的不希望这样做!我想我会继续并开始这个过程,但我真的希望得到一个不同的答案…我不确定这是否是一个已知的问题,但请访问CF Slack或Adobe论坛。如果它最终成为一个bug,报告它。你在用什么数据库?@Shawn,thx。我们使用的是SQL Server 2014,我们已经向Adobe提交了关于这些问题的bug。