我将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查询,但是我两次尝试都没有取得成功。
为了解决此问题,我缺少哪些配置?感谢。
答案 0 :(得分:2)
这是MySQL的一个众所周知的问题,因为它会为每个表创建一个实际的磁盘文件。
Hibernate据说试图通过内部小写所有表名来专门为MySQL解决这个问题,但显然这不是一个防弹解决方案。
据我所知,除了确保在任何地方使用一致的大小写之外,你无能为力。换句话说,没有魔术配置选项会为你做。
如果您使用" hibernate.hbm2ddl.auto"让hibernate创建数据库模式的属性,那么你应该没问题,但是如果你在预先存在的数据库上运行hibernate,那么这还不够,因为你还必须确保表是在#39中创建的。 ;表名'并且任何外键引用也在' table_name'中引用它。 (因此,在任何地方使用@Table(name="table_name")
都是不够的。)
在任何一种情况下,你的数据库都是在windows下创建的,所以即使你有hibernate创建它,它仍然可能是用你在windows下使用的任何有趣的大写方案创建的,这意味着你可能想扔掉你的数据库并重新创建它。