gpt4 book ai didi

java - Hibernate:对 MySQL 使用反引号,但对 HSQL 不使用

转载 作者:可可西里 更新时间:2023-11-01 06:51:49 24 4
gpt4 key购买 nike

我从事的一个项目(使用 Java、Spring、Hibernate)最近从 Oracle 更改为 MySQL。在少数情况下,代码中的某些属性是 MySQL 中的保留字,例如“release”。

有几个解决方案,1) 重命名代码中的属性和后续的 getter/setter 方法,同时更新调用这些方法的代码 2) 用 @Column(name="`release`") 注释代码中的属性.这告诉 hibernate 在与数据库对话时引用名称。

我宁愿远离第一种方法,以减少破坏更多东西的机会。第二种方法是“好的”,除了它成为 MySQL 特定的。在我们的开发中。设置我们使用 HSQL,它不喜欢这些列名称周围的反引号。

我查看了 org.hibernate.mapping.Column 类,我发现它有“getQuotedName”方法,如果我可以子类化 Column 并告诉 Hibernate 使用我自己的 Column 类,我可以覆盖这些方法。

根据以下首选方法解决此问题的最佳方法是:a) 不必重构代码库(b/c 更改属性名称、getter/setter 方法等)和 b) 希望应用程序仍然工作在 HSQL 和 MySQL 中。

在属性文件中有一个可以切换以打开/关闭某些列命名修复的属性是合理的。这提醒了我,我尝试使用自定义命名策略并覆盖“columnName”方法以用反引号将列名括起来……这不起作用,即使在 MySQL 上也是如此。

最佳答案

back ticks 解决方案听起来不错。但是,如果它不起作用或者您不想使用特定 JPA 提供程序的未记录的功能:为什么根本不使用任何(或最常见的)数据库中未保留的列名。

您不需要更改 java 属性的名称,您只需为它们指定一个列名。

关于java - Hibernate:对 MySQL 使用反引号,但对 HSQL 不使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668063/

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