将Map <enum,enum =“”>存储为String </enum,>

时间:2012-04-21 08:38:41

标签: java hibernate postgresql enums jpa-2.0

我需要帮助在JPA2中存储地图,其中键和值都是枚举(Map<Enum, Enum>)。使用Hibernate作为我的JPA提供程序,它将枚举存储为blob,但我需要将数据存储为字符串。我尝试了以下注释来解决这个问题:

@ElementCollection(fetch = FetchType.EAGER)
@MapKeyEnumerated(value = EnumType.STRING)
public Map<Enum, Enum> getElementsMap() {
    return elementsMap;
}

但数据仍然作为blob存储在数据库中。有人解决了这个问题吗?

2 个答案:

答案 0 :(得分:3)

@Enumerated用于定义值的类型。在映射到表之后,其中键和值的列都是varchars,枚举的名称将保存:

@Enumerated(EnumType.STRING)
@ElementCollection(fetch = FetchType.EAGER)
@MapKeyEnumerated(value = EnumType.STRING)
public Map<MyEnum, MyOtherEnum> elementsMap = new HashMap<>();

它将产生大致如下表:

[NAME_OF_ENTITY]_ELEMENTSMAP (
  NAME_OF_ENTITY_ID INTEGER, 
  ELEMENTSMAP VARCHAR(255), 
  ELEMENTSMAP_KEY VARCHAR(255)
)

答案 1 :(得分:1)

几乎每个Java对象都有toString() method如果你想在数据库中表示你的Map,那么我建议你选择它。

但是我必须问你确定它是你想存储的MAP而不是键或值的元素吗?