【问题标题】:Hibernate won't load certain table under different OSHibernate 不会在不同的操作系统下加载某些表
【发布时间】:2012-02-03 01:42:39
【问题描述】:

我正在使用 Hibernate 和 mySQL。

我主要在 Windows 上开发 Java 应用程序。所有的表都是用小写的。

当我在 linux 服务器上部署它时,我注意到这些表现在在正确的大小写中(java 命名约定)。这很好,但由于某种原因,我的 oneToMany 列表之一没有加载。

我没有使用任何其他查询,除了 " from "+class.getName()

我已尝试更改 my.conf 中的 *lower_case_table_names=2* 以使其在 Windows 中匹配,但这并没有帮助.

还有其他想法吗?


其实,那是愚蠢的。是我在应用程序中的逻辑导致了问题,我希望进行一些部分提取。

【问题讨论】:

    标签: mysql windows linux hibernate


    【解决方案1】:

    您选择了错误的选项,引自手册:
    http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

    lower_case_table_names =
    0
    表和数据库名称使用 CREATE TABLE 或 CREATE DATABASE 语句中指定的字母大小写存储在磁盘上。名称比较区分大小写。如果您在具有不区分大小写文件名的系统(例如 Windows 或 Mac OS X)上运行 MySQL,则不应将此变量设置为 0。如果在不区分大小写的文件系统上使用 --lower-case-table-names=0 将此变量强制为 0,并使用不同的字母大小写访问 MyISAM 表名,则可能会导致索引损坏。

    1
    表名以小写形式存储在磁盘上,并且名称比较不区分大小写。 MySQL 在存储和查找时将所有表名转换为小写。此行为也适用于数据库名称和表别名。

    2
    表和数据库名称使用 CREATE TABLE 或 CREATE DATABASE 语句中指定的字母大小写存储在磁盘上,但 MySQL 在查找时将它们转换为小写。名称比较不区分大小写。 这仅适用于不区分大小写的文件系统! InnoDB 表名以小写形式存储,与 lower_case_table_names=1 一样。

    选项 2 永远不会在 Linux 上运行,因为该系统区分大小写。
    在 Linux 和所有其他需要使用选项 1 的系统上。

    那么你的区分大小写问题就解决了。

    【讨论】:

    • 原来我不需要做这一步,因为 Hibernate 为我处理了这一切。这实际上是我对导致问题的代码的更新之一。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    相关资源
    最近更新 更多