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

时间:2015-02-06 19:31:35

标签: mysql linux eclipse hibernate

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

中的MySQL功能

我在每个模型类中都添加了@Table(name="table_name")语句,以避免MySQL / Hibernate对表名进行大写,我查看了所有表引用为小写的DAO类中的所有HQL查询,但是我两次尝试都没有取得成功。

为了解决此问题,我缺少哪些配置?感谢。

1 个答案:

答案 0 :(得分:2)

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

Hibernate据说试图通过内部小写所有表名来专门为MySQL解决这个问题,但显然这不是一个防弹解决方案。

据我所知,除了确保在任何地方使用一致的大小写之外,你无能为力。换句话说,没有魔术配置选项会为你做。

如果您使用" hibernate.hbm2ddl.auto"让hibernate创建数据库模式的属性,那么你应该没问题,但是如果你在预先存在的数据库上运行hibernate,那么这还不够,因为你还必须确保表是在#39中创建的。 ;表名'并且任何外键引用也在' table_name'中引用它。 (因此,在任何地方使用@Table(name="table_name")都是不够的。)

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