我试图在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/