Java 商店地图<;枚举,枚举>;作为字符串

Java 商店地图<;枚举,枚举>;作为字符串,java,hibernate,postgresql,enums,jpa-2.0,Java,Hibernate,Postgresql,Enums,Jpa 2.0,我需要在JPA2中存储映射的帮助,其中键和值都是枚举(map)。使用Hibernate作为我的JPA提供程序,它将枚举存储为blob,但我需要将数据存储为字符串。我尝试了以下注释来解决此问题: @ElementCollection(fetch = FetchType.EAGER) @MapKeyEnumerated(value = EnumType.STRING) public Map<Enum, Enum> getElementsMap() { return element

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

@ElementCollection(fetch = FetchType.EAGER)
@MapKeyEnumerated(value = EnumType.STRING)
public Map<Enum, Enum> getElementsMap() {
    return elementsMap;
}
@ElementCollection(fetch=FetchType.EAGER)
@MapKeyEnumerated(值=EnumType.STRING)
公共地图getElementsMap(){
返回元素映射;
}

但数据仍以blob的形式存储在数据库中。有人解决了这个问题吗?

几乎每个Java对象都有一个
toString()方法
如果您想在数据库中表示地图,那么我建议您选择此方法


但是,我必须问您是否确定要存储的是映射,而不是键或值的元素?

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

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

将地图保存为字符串听起来一点也不明智。你听说过数据规范化吗?对不起,我用错误的方式写了这个问题,现在它是固定的,我指的是键和值。你可以在键和值上使用
toString()
。有什么问题吗?我不认为这是最基本的东西,看看这篇文章:也许你应该参考一本Java初学者的书。@Niklas B。在你写东西之前,有人建议他读一些东西,三思而后行!如果你真的不理解一个问题,也不知道具体的解决方案,请不要用你不相关的评论发布问题,并在发布答案之前尝试研究一些想法。是的,这是关键和价值,抱歉,我从JPA2和hibernate开始,你能在这里发布代码中的更改吗?我必须做什么才能将这些键和值存储为字符串?谢谢你的帖子,我试过了,但没有帮到我。我使用postgresql db和hibernate在表中创建int8、bytea、bytea数据类型。
[NAME_OF_ENTITY]_ELEMENTSMAP (
  NAME_OF_ENTITY_ID INTEGER, 
  ELEMENTSMAP VARCHAR(255), 
  ELEMENTSMAP_KEY VARCHAR(255)
)