java - 使用 JPA 存储 Map<String,String>

标签 java jpa orm jpa-2.0

我想知道是否可以使用注释来使用 JPA2 将 attributes 映射保留在以下类中

public class Example {
    long id;
    // ....
    Map<String, String> attributes = new HashMap<String, String>();
    // ....
}

由于我们已经有一个预先存在的生产数据库,所以理想情况下 attributes 的值可以映射到以下现有表:

create table example_attributes {
    example_id bigint,
    name varchar(100),
    value varchar(100));

最佳答案

JPA 2.0 通过 @ElementCollection 注释支持基元集合,您可以将其与 java.util.Map 集合的支持结合使用。 像这样的东西应该可以工作:

@Entity
public class Example {
    @Id long id;
    // ....
    @ElementCollection
    @MapKeyColumn(name="name")
    @Column(name="value")
    @CollectionTable(name="example_attributes", joinColumns=@JoinColumn(name="example_id"))
    Map<String, String> attributes = new HashMap<String, String>(); // maps from attribute name to value

}

另见(在 JPA 2.0 规范中)

  • 2.6 - 可嵌入类和基本类型的集合
  • 2.7 map 集合
  • 10.1.11 - ElementCollection 注释
  • 11.1.29 MapKeyColumn 注解

关于java - 使用 JPA 存储 Map<String,String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3393649/

相关文章:

Java动态代理

linux - 如何订阅补充服务器 channel 以在 RHEL 4.x 上安装 sun jdk 6

java - 如果 Hibernate 查询缓存仅用作 JPA 提供程序,它是否有任何影响?

swift - swift 中泛型类型的静态存储属性有什么好的替代方法?

php - Symfony2 和 Propel 包 : add additional filter to the Propel param converter

python - 在设计 python 类时,使用 getters/setters 和属性的良好风格是什么

java - 如何使用 PDFBOX 加载受密码保护的 PDF 表单

java - JODConverter 页面方向

hibernate - @Enumerated(EnumType.STRING) 因 @AttributeOverride 丢失

java - 捕获异常的 Spring 事务