我需要帮助在JPA2中存储地图,其中键和值都是枚举(Map<Enum, Enum>
)。使用Hibernate作为我的JPA提供程序,它将枚举存储为blob,但我需要将数据存储为字符串。我尝试了以下注释来解决这个问题:
@ElementCollection(fetch = FetchType.EAGER)
@MapKeyEnumerated(value = EnumType.STRING)
public Map<Enum, Enum> getElementsMap() {
return elementsMap;
}
但数据仍然作为blob存储在数据库中。有人解决了这个问题吗?
答案 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而不是键或值的元素吗?