MySQL 通过 Hibernate 在 Linux 中区分大小写

标签 mysql linux eclipse hibernate

我将我在 Eclipse 中的开发环境从 Windows 转移到了 Debian。当我这样做时,我注意到当 Hibernate 在初始化期间进行数据模型检查时,由于区分大小写的问题,在 MySQL 中找不到(只是一些)表名。其中两个表仍在按“Table_name”而不是“table_name”进行搜索。当它发生时,Hibernate 会创建新表“Table_name”,而忽略现有的“table_name”表。我读到这是由于区分大小写的操作系统中的 MySQL 功能。

我在每个模型类中添加了 @Table(name="table_name") 语句,以避免 MySQL/Hibernate 将表名大写,并且我检查了 DAO 中的所有 HQL 查询将所有表引用都设置为小写的类,但我在这两种尝试中都没有取得成功。

为了修复此行为,我缺少什么配置?谢谢。

最佳答案

这是 MySQL 的一个众所周知的问题,因为它会为每个表创建一个实际的磁盘文件。

据推测,Hibernate 试图通过在内部将所有表名小写化来专门为 MySQL 解决这个问题,但显然这不是一个万无一失的解决方案。

据我所知,除了确保在任何地方都使用一致的大写外,您无能为力。换句话说,没有神奇的配置选项可以为您完成。

如果你使用“hibernate.hbm2ddl.auto”属性让 hibernate 创建你的数据库模式,那么你应该没问题,但是如果你在一个预先存在的数据库上运行 hibernate 那么这还不够,因为你有还要确保该表是在“table_name”中创建的,并且任何外键引用也将其引用为“table_name”。 (因此,到处使用 @Table(name="table_name") 是不够的。)

在任何一种情况下,您的数据库都是在 Windows 下创建的,所以即使您使用 hibernate 创建它,它仍然可能是使用您在 Windows 下使用的任何有趣的大写方案创建的,这意味着您可能想扔掉您的数据库并重新创建它。

关于MySQL 通过 Hibernate 在 Linux 中区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28373348/

相关文章:

linux - 如何在没有网络的情况下在CentOS 6.3上升级开发者工具?

Android Eclipse 插件 "reset adb"给出 "Adb connection Error:EOF"错误,没有阻塞,但它是什么?

java - 适用于 Red Hat Enterprise Linux 6 的统一 Eclipse Luna 解决方法集

mysql - 使用 Apache Drill 进行多表连接

php - 回滚mysql表然后再次迁移是否会在保存数据时出现问题?

linux - 日期中的时区?

java - 在 Intent 之间传递类 ArrayList

php - 如何获得最常见的值?它不断返回我整数

mysql - 在引用表中提供时间戳(多对多关系)

linux - 使用 sed 编辑器替换包含反斜杠的字符串