使用枚举作为mapkey会在数据库中生成RAW

时间:2009-03-25 13:00:06

标签: java hibernate enums map

我正在尝试使用枚举作为Hibernate中地图的mapkey,但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),但看起来这对mapkey不起作用。

2 个答案:

答案 0 :(得分:1)

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

请参阅https://www.hibernate.org/265.html

HTH 汤姆

答案 1 :(得分:0)

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