【问题标题】:Attributes having different case behaving strangely具有不同大小写的属性表现得很奇怪
【发布时间】:2018-01-23 11:20:59
【问题描述】:

我有一个包含实体的 JSON。该实体有 3 个属性: firstNameFirstNamefIRStName。在我的 POJO 中,我使用来自 Lombok 的 @Data 注释

{
      "name": "AtQueryEntity",
      "attributes": [
        {
          "name": "FirstName",
          "type": "STRING",
          "required": true
        },
        {
          "name": "fIRStName",
          "type": "STRING",
          "required": true
        },
        {
          "name": "FIRSTName",
          "type": "STRING",
          "required": true
        }
      ]
}

问题是 MYSQL 只创建 2 列。

  1. Id

  2. FIRSTName

如何确保为所有属性创建列?

我知道约定是属性应该是唯一的,属性的第一个字母应该是小写的,但我有一个用例,其中属性只能通过大写或小写来区分。

Hibernate 或 JPA 中是否存在限制,它不会为仅因大写或小写而异的属性创建列?还是我在这里遗漏了什么?

【问题讨论】:

标签: mysql spring hibernate jpa lombok


【解决方案1】:

我有一个用例,其中属性只能通过大写或小写来区分。

fOrGeT iT! Hibernate 中有ImplicitNamingStrategyPhysicalNamingStrategy,JPA2 可能支持也可能不支持,MySQL 支持带引号的名称,因此您可能能够以某种方式使其工作。

同时,您可以肯定,您很快就会遇到一个根本不支持它的工具。仅在以防万一的情况下使用不同的名称是一件很痛苦的事情,它肯定会让您大吃一惊,无论是使用 Java Beans 还是 Windows 或其他任何东西。

字段和 getter/setter 名称之间的 Java Beans 转换不是双射的,因此您会遇到问题。 Lombok 是否完全符合 Java Beans,取决于您如何理解这个愚蠢的标准(java.beans 本身在内部与大小写不一致)。

不,没有用例。虽然您可能会从第三方获得此类数据,但这并不意味着您应该使用它们编写您的程序。这样的名字对于工具和程序员来说都是痛苦的。只需尽快清理您的输入,然后对输出 ALAP 进行清理。

即使_1_2 是比FirstNamefIRStName 更好的标识符,所以避免后者永远不会出错。

谢谢。我需要添加验证以禁止具有相同字母频率的属性名称。

这与列名无关。这意味着您需要一个名为column_name 的列,其中存储"FirstName""fIRStName""FIRSTName" 等字符串。这完全没有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2012-08-04
    • 2020-05-03
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多