9

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

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

但是数据仍然作为 blob 存储到数据库中。有没有人解决过这个问题?

4

2 回答 2

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)
)
于 2012-04-21T10:17:50.977 回答
1

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

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

于 2012-04-21T08:55:00.833 回答