我试图在hibernate中将枚举用作映射键,但hibernate将枚举存储为原始:
我有这个枚举:

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将枚举存储为数据库中的raw而不是varchar:
"Column Name"   "Data Type"
"COMPANY_ID"    "NUMBER(19,0)"
"ACC_TYPE"      "RAW"
"ACCOUNT_NO"    "VARCHAR2(255 CHAR)"

我想把这个存储为varchar。我试图添加@enumerated(value=enumtype.string),但这似乎对映射键不起作用。

最佳答案

您可以尝试为枚举映射定义hibernate用户类型。这将允许您指定要在ddl中使用的db列类型。
https://www.hibernate.org/265.html
高温高压
汤姆

关于java - 使用枚举作为mapkey会在数据库中产生RAW,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/681462/

10-09 18:09
查看更多