在休眠中为同一实体的 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 服务器配置差异表名称的主要内容,如果未能解决你的问题,请参考以下文章