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 ではなく raw としてデータベースに保存します。
"Column Name" "Data Type"
"COMPANY_ID" "NUMBER(19,0)"
"ACC_TYPE" "RAW"
"ACCOUNT_NO" "VARCHAR2(255 CHAR)"
これをvarcharとして保存したい。@Enumerated(value = EnumType.STRING) を追加しようとしましたが、マップキーでは機能しないようです。