【问题标题】:Strange issue with hibernate entity with mysql 5.6.16mysql 5.6.16 的休眠实体的奇怪问题
【发布时间】:2016-02-29 17:57:44
【问题描述】:

我遇到了一个关于休眠实体和 mysql 5.6.16 组合的奇怪问题。但是,我通过反复试验方法找到了我的解决方案,但没有得到它背后的逻辑。我在 Google 上也没有得到太多帮助。

我已经使用 mysql 5.6.22 开发了一个休眠应用程序,并在我的 Windows 系统中进行了测试,并且工作正常。

当我将相同的应用程序部署到具有 mysql 5.6.16 的 redhat linux 服务器中时,即使用户表存在于数据库中,也会出现以下错误

2016-02-28 00:52:45 WARN  SqlExceptionHelper:143 - SQL Error: 1146, SQLState: 42S02
2016-02-28 00:52:45 ERROR SqlExceptionHelper:144 - Table '<dbname>.User' doesn't exist

我发现我的redhat服务器的抱怨是因为如果表名是“user”,我的eclipse生成的hibernate实体没有添加@Table(“user”)但是添加了@Table(“user_address”)如果表名带有下划线 (_),则在实体中。

还有一种可能是redhat服务器上的mysql不支持不区分大小写的表名,即如果@Table("user")没有显式添加到实体中,hibernate会生成查询为“select * from User”

我的问题是相同的代码 [不添加 @Table("user")] 如何在我的 Windows 系统中运行?

这背后有什么逻辑吗?

【问题讨论】:

  • 表名可以区分大小写,具体取决于底层文件系统。 User != user

标签: mysql hibernate


【解决方案1】:

正如我在问题陈述中所怀疑的那样,这个问题主要是因为 mysql 在 redhat 服务器中不支持不区分大小写,但 windows 支持。在 linux 中可以通过以下任一方式解决此问题。

  1. 在my.cnf文件的[mysqld]下添加lower_case_table_names = 1并重启mysql服务器

  1. 在hibernate实体类中添加@Table("user")

【讨论】:

    猜你喜欢
    • 2011-08-19
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多