3

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) を追加しようとしましたが、マップキーでは機能しないようです。

4

2 に答える 2

1

enum マッピング用に Hibernate UserType を定義してみてください。これにより、DDL で使用する db 列の型を指定できます。

https://www.hibernate.org/265.htmlを参照してください

HTH トム

于 2009-05-14T16:42:55.337 に答える
0

@MapKeyEnumerated JPA アノテーションがありますが、Hibernate コア 3.6.5 の時点では、生成された DDL タイプを変更することはほとんどないようです。私はまだ生を見ます:(

于 2011-10-18T15:15:05.117 に答える