MySQL 通过 Hibernate 在 Linux 中区分大小写
MySQL Case Sensitive in Linux through Hibernate
我将 Eclipse 中的开发环境从 Windows 转移到 Debian。当我这样做时,我注意到当 Hibernate 在初始化期间进行数据模型检查时,由于区分大小写的问题,(只有一些)table 名称未在 MySQL 中找到。 table 中的两个仍在由 "Table_name" 而不是 "table_name" 搜索。当它发生时,Hibernate 会创建新的 tables "Table_name" 并忽略现有的 "table_name"。我读到这是由于区分大小写的 MySQL 功能 O.S.
我在每个模型 class 中添加了 @Table(name="table_name")
语句,以避免 table 名称被 MySQL/Hibernate 大写,并且我检查了所有 HQL 查询DAO 类 将所有 table 引用都设为小写,但我在这两种尝试中都没有取得成功。
我缺少什么配置来修复此行为?谢谢
这是 MySQL 的一个众所周知的问题,因为它会为每个 table 创建一个实际的磁盘文件。
Hibernate 据说试图通过在内部将所有 table 名称小写化来专门针对 MySQL 来解决这个问题,但显然这不是一个万无一失的解决方案。
据我所知,除了确保在任何地方都使用一致的大写外,您无能为力。换句话说,没有神奇的配置选项可以为您完成。
如果您使用 "hibernate.hbm2ddl.auto" 属性 让休眠创建您的数据库模式,那么您应该没问题,但是如果您 运行 在预先存在的数据库上休眠,那么这还不够,因为您还必须确保 table 是在 'table_name' 中创建的,并且任何外键引用也在 'table_name' 中引用它。 (因此,到处使用 @Table(name="table_name")
是不够的。)
在任何一种情况下,您的数据库都是在 windows 下创建的,因此即使您使用休眠创建它,它仍然可能是使用您在 windows 下使用的任何有趣的大写方案创建的,这意味着您可能想要丢弃您的数据库并重新创建它。
我将 Eclipse 中的开发环境从 Windows 转移到 Debian。当我这样做时,我注意到当 Hibernate 在初始化期间进行数据模型检查时,由于区分大小写的问题,(只有一些)table 名称未在 MySQL 中找到。 table 中的两个仍在由 "Table_name" 而不是 "table_name" 搜索。当它发生时,Hibernate 会创建新的 tables "Table_name" 并忽略现有的 "table_name"。我读到这是由于区分大小写的 MySQL 功能 O.S.
我在每个模型 class 中添加了 @Table(name="table_name")
语句,以避免 table 名称被 MySQL/Hibernate 大写,并且我检查了所有 HQL 查询DAO 类 将所有 table 引用都设为小写,但我在这两种尝试中都没有取得成功。
我缺少什么配置来修复此行为?谢谢
这是 MySQL 的一个众所周知的问题,因为它会为每个 table 创建一个实际的磁盘文件。
Hibernate 据说试图通过在内部将所有 table 名称小写化来专门针对 MySQL 来解决这个问题,但显然这不是一个万无一失的解决方案。
据我所知,除了确保在任何地方都使用一致的大写外,您无能为力。换句话说,没有神奇的配置选项可以为您完成。
如果您使用 "hibernate.hbm2ddl.auto" 属性 让休眠创建您的数据库模式,那么您应该没问题,但是如果您 运行 在预先存在的数据库上休眠,那么这还不够,因为您还必须确保 table 是在 'table_name' 中创建的,并且任何外键引用也在 'table_name' 中引用它。 (因此,到处使用 @Table(name="table_name")
是不够的。)
在任何一种情况下,您的数据库都是在 windows 下创建的,因此即使您使用休眠创建它,它仍然可能是使用您在 windows 下使用的任何有趣的大写方案创建的,这意味着您可能想要丢弃您的数据库并重新创建它。