Использование enum в качестве mapkey приводит к RAW в базе данных - PullRequest
3 голосов
/ 25 марта 2009

Я пытаюсь использовать enum как mapkey для карты в Hibernate, но Hibernate хранит мое enum как 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 хранит перечисление в виде raw в базе данных вместо 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 ]

1 голос
/ 14 мая 2009

Вы можете попытаться определить Hibernate UserType для отображения enum. Это позволит вам указать тип столбца БД для использования в DDL.

См. https://www.hibernate.org/265.html

НТН Том

0 голосов
/ 18 октября 2011

Есть аннотация @MapKeyEnumerated JPA, но, как и в ядре Hibernate 3.6.5, похоже, она мало что меняет для создания сгенерированного типа DDL. Я все еще вижу сырой: (* ​​1001 *

...