具有不同情况的属性表现奇怪

时间:2018-01-23 11:20:59

标签: mysql spring hibernate jpa lombok

我有一个有实体的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

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

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

    在Hibernate或JPA中是否存在限制,其中它不会为仅由大小写区分的属性创建列?或者我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:0)

  

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

fOrGeT iT! Hibernate中有ImplicitNamingStrategyPhysicalNamingStrategy,JPA2可能支持也可能不支持,MySQL支持引用名称,因此您可以获得它以某种方式工作。

与此同时,你可以肯定,你很快就会遇到一个根本不支持它的工具。使用不同的名称只是一个很大的痛苦,它肯定会让你多次惊喜,无论是使用Java Bean还是Windows或其他什么。

字段和getter / setter名称之间的Java Bean转换不是双射的,因此您将遇到问题。 Lombok是或者不完全符合Java Beans,取决于你如何理解这个愚蠢的标准(java.beans本身内部不一致w.r.t。)。

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

即使_1_2也是比FirstNamefIRStName更好的标识符,因此避免使用后者不会出错。

  

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

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