【问题标题】:JPA 2.0 & MySQL are not respecting case sensitive table namesJPA 2.0 和 MySQL 不尊重区分大小写的表名
【发布时间】:2013-03-06 12:28:14
【问题描述】:


我的耳朵项目有一个奇怪的问题: 我已经在我的实体类上放了正确的注释:

@Entity
@Table(name = "PRODUCTS")

但是当我在 glassfish 3.1.2.2 上部署我的应用程序时,我发现 JPA 使用小写字符创建了表

我正在使用 EclipseLink 2.4.1

请帮帮我。

【问题讨论】:

  • 不,我试图强制使用转义字符的名称,但它没有工作,这就是我创建这篇文章的原因
  • 开启日志记录。我相信您会看到 eclipselink 使用与您定义的名称完全相同的名称发出 create SQL。默认情况下,数据库大多不区分大小写,因此除非表/列名被分隔,否则在 MySQL 上将显示为小写。
  • @Chris: afaik,mysql 在 *nix 系统上默认区分大小写
  • @DenisTulskiy 我相信你是对的,但他没有说他使用的是哪个操作系统。我相信 MySQL 会在 Windows 上以小写形式返回表名,无论它是用什么大小写创建的,如果它没有分隔的话。其他像 Oracle 会以大写形式返回它。

标签: java mysql jpa glassfish eclipselink


【解决方案1】:

我从 Brian Vosburgh 的评论中得到了解决方案: 在 Windows 版本的 MySQL 中,表的名称设置为小写。在linux上,默认情况下这个配置是关闭的,JPA设置的表名不加修改地应用到MySQL。

要使其像 linux 一样在 windows 上运行,请添加以下行:

lower_case_table_names=0

感谢您的帮助,特别是Brian Vosburgh

【讨论】:

    【解决方案2】:

    我找到了一个与众不同的属性。 在 EclipseLink 向导(从表中生成实体)的第三页(自定义默认值)中,我选中了“始终生成可选的 JPA 注释和 DDL 参数”选项。 此选项在Entity 类中写入以下注释:

    @Table(name="TableName")
    

    将使用正确的表名字母大小写。

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 2011-11-15
      • 2011-01-01
      • 2016-11-12
      • 2011-09-02
      • 1970-01-01
      相关资源
      最近更新 更多