2015-02-06 177 views
2

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

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

为了解决这个问题,我错过了什么配置?谢谢。

+0

嗯,亚历克斯,发生了什么事?你有没有得到它的工作? – 2015-02-09 10:51:24

回答

2

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

Hibernate据称试图通过内部降低所有表名来克服这个问题,但显然这不是一个防弹解决方案。

据我所知,除了确保统一的大写字母在任何地方都可以使用之外,您无法做任何事情。换句话说,没有魔术配置选项可以为你做。

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

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

+0

感谢您的回复。事实上,我没有照顾外键。也许我会转储所有数据并重新创建数据库。在另一个问题上,在这里,在stackoverflow的建议我改变为InteliJ。我甚至安装了它,但我的日程安排已经晚了,我没有足够的时间去完成另一条学习曲线。 Linux实际上让Eclipse(很多)更快,我不知道为什么。在Windows中,Eclipse性能在O.S.之后变得糟糕透顶。重新安装。也许在我的下一个项目中,我会转向InteliJ。谢谢您的回答。 – Alex 2015-02-09 18:05:59

+0

当然,很高兴能有所帮助。如果您有明确的答案,请将您的发现发布给未来的程序员。 – 2015-02-09 18:16:29

+1

有必要注意一个重要的问题,这对于程序员的“后代”是有价值的:在我的项目中,我们称之为项目A,另一个项目的引用,通过Maven调用项目B.当我在项目B中进行更改时,我忘记通过Maven Install更新.jar文件,然后更新项目A引用。这样一来,在项目A建筑中,存储在过时的.jar中的旧表名成为问题的根源。 – Alex 2015-02-09 19:59:29