【问题标题】:Store Map<Enum, Enum> as String将 Map<Enum, Enum> 存储为字符串
【发布时间】:2012-05-02 16:54:28
【问题描述】:

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

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

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

【问题讨论】:

  • 将地图保存为字符串听起来一点也不明智。您听说过数据规范化吗?
  • 对不起,我写错了这个问题,现在它已经修复了,我的意思是键和值。
  • 您可以在键和值上都使用toString()。有什么问题?
  • 我不认为这是非常基本的东西,看看这篇文章:forum.hibernate.org/viewtopic.php?f=1&t=999270&start=0也许你应该参考一本Java初学者的书。
  • @Niklas B. 在你写东西之前有人建议他读一些东西,三思而后行!如果您确实不了解某个问题并且不知道具体的解决方案,请不要向您不相关的 cmets 发送垃圾问题,并在发布答案之前尝试研究一些想法。

标签: java hibernate postgresql enums jpa-2.0


【解决方案1】:

@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)
)

【讨论】:

  • 感谢您的帖子,我试过了,但没有帮助。我使用 postgresql db 和 hibernate 在表中创建 int8、bytea、bytea 数据类型。
【解决方案2】:

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

不过我要问一下,您确定这是您要存储的 MAP,而不是键或值的元素吗?

【讨论】:

  • 是的,它是键和值,对不起,我从 JPA2 和休眠开始,你能在这里发布我必须做的代码更改以将这些键和值存储为字符串吗?
猜你喜欢
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多