在休眠中为同一实体的 MySQL 和 SQL 服务器配置差异表名称

Posted

技术标签:

【中文标题】在休眠中为同一实体的 MySQL 和 SQL 服务器配置差异表名称【英文标题】:Configure diff table name in hibernate for MySQL and SQL server for the same entity 【发布时间】:2022-01-03 22:05:32 【问题描述】:

我有一个表名为“Transaction”的实体。在使用 spring orm 和 hibernate 创建连接时,在启动时它成功地在 mysql 中创建表,但在 SQL server 中作为“事务”关键字,它在启动时失败。 我无法更改代码中的表名,因为会有很多连锁反应。因此,有一种方法可以在 java 中将表名定义为 Transaction 并以这样的方式拦截或配置,即在连接到 SQL 服务器时休眠转义关键字并将其查询为“[Transaction]”(使用 [] 转义它)

【问题讨论】:

您可以使用命名策略:baeldung.com/hibernate-naming-strategy 谢谢。实施 PhysicalNamingStrategy 成功了。请务必将其发布为答案,让我接受它 【参考方案1】:

您可以使用本文所述的命名策略:https://www.baeldung.com/hibernate-naming-strategy

public class CustomPhysicalNamingStrategy implements PhysicalNamingStrategy 
    @Override
    public Identifier toPhysicalTableName(final Identifier identifier, final JdbcEnvironment jdbcEnv) 
        return Identifier.toIdentifier(**your table name**);
    

    // Other methods

【讨论】:

【参考方案2】:

您可以尝试以下方法之一:

@Table(name = "`Transaction`");

@Table(name = "\"Transaction\"") 

或通过设置属性:

hibernate.auto_quote_keyword=true

【讨论】:

这已经到位。请再次阅读问题。我的问题有点复杂 我的错!您可以尝试以下方式之一:@Table(name = "`Transaction`"); @Table(name = "\"Transaction\"") 或 hibernate.auto_quote_keyword=true 请edit你的答案,而不是添加cmets。

以上是关于在休眠中为同一实体的 MySQL 和 SQL 服务器配置差异表名称的主要内容,如果未能解决你的问题,请参考以下文章

在同一实体上 JOIN FETCH 后休眠额外查询

休眠搜索以处理两个不同实体对象的相同索引

使用实体框架/休眠与 sql2008 地理数据类型

在休眠条件中使用mysql“按大小写”

休眠自动增量 MySQL

我可以在不创建实体类的情况下对大型 sql 使用休眠命名查询吗?