【问题标题】:Using an enum as a mapkey results in a RAW in the database使用枚举作为映射键会在数据库中生成 RAW
【发布时间】:2010-10-15 10:51:04
【问题描述】:

我正在尝试将枚举用作 Hibernate 中映射的映射键,但 Hibernate 将我的枚举存储为 RAW:

我有这个枚举:

public enum AccountType implements Serializable {
    CASH,
    CREDIT_CARD,
    GIRO,
    INVOICE,
    OTHER;
}

我正在尝试将其用作地图中的键:

@CollectionOfElements
@MapKey(columns =  @Column(name="ACC_TYPE"), 
  targetElement = AccountType.class)
@Column(name="ACCOUNT_NO")
public Map<AccountType, String> getAccounts() {
  return accountMap;
}

这里发生的是 Hibernate 将枚举作为原始数据而不是 varchar 存储在数据库中:

"Column Name"   "Data Type" 
"COMPANY_ID"    "NUMBER(19,0)"
"ACC_TYPE"      "RAW"   
"ACCOUNT_NO"    "VARCHAR2(255 CHAR)"

我希望将其存储为 varchar。我尝试添加@Enumerated(value = EnumType.STRING),但它似乎不适用于映射键。

【问题讨论】:

    标签: java hibernate enums map


    【解决方案1】:

    您可以尝试为枚举映射定义 Hibernate UserType。这将允许您指定要在 DDL 中使用的 db 列类型。

    https://www.hibernate.org/265.html

    HTH 汤姆

    【讨论】:

      【解决方案2】:

      有 @MapKeyEnumerated JPA 注释,但从 Hibernate 核心 3.6.5 开始,它似乎对更改生成的 DDL 类型没有太大作用。我仍然看到原始的:(

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-15
        • 2016-12-13
        • 2011-05-27
        • 2013-10-22
        • 2014-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多