java - 将 Map<Enum, Enum> 存储为字符串

标签 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 存储在数据库中。有人解决过这个问题吗?

最佳答案

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

关于java - 将 Map<Enum, Enum> 存储为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10257502/

相关文章:

sql - postgresql 两个嵌套连接和连接中的数组

java - Rabbitmq - 当不自动确认消息时如何处理 channel

java - Oracle 和 db2 的 CLASSPATH 与 java.library.path 设置

java - 有没有办法在语言环境中获取与给定字符等效的所有字符

java - java中的审计和数据历史

sql - 如何停止 PostgreSQL 的 SQL 脚本执行?

sql - PostgreSQL:按记录数对数据进行分组的有效方法

Java,检查当前是否有任何进程 ID 在 Windows 上运行

java - Hibernate\JPA 在高并发 Web 应用程序上的使用

java - Postgresql 日期类型和 java SimpleDateFormat