JPA Map <string,string []> mapping </string,string []>

时间:2014-05-08 10:25:52

标签: jpa mapping persistence

如何在不使用Hibernate类的情况下在JPA中映射Map?

public Map<String, String[]> parameters = new HashMap<String, String[]>();

提前致谢。

1 个答案:

答案 0 :(得分:0)

示例实现:

@Entity
@Table(name = "MAP") //optional
public class Parameters {

    @Id
    @Column(name = "\"KEY\"") //optional
    private String id;

    @ElementCollection
    @CollectionTable( //optional
        name = "MAP_VALUES", 
        joinColumns = { @JoinColumn(name="MAP_KEY") }
    ) 
    private Collection<String> collection;

    public Parameters() { }

    public Parameters(String key, Collection<String> values) {
        this.id = key;
        this.collection = values;
    }

    public Collection<String> values() {
        return collection;
    }

    // ...
}

可以将实体实例插入数据库,如下所示:

em.persist(new Parameters("first", Arrays.asList("a", "b", "c")));
em.persist(new Parameters("second", Arrays.asList("d", "e", "f")));
...

这将在数据库中生成两个表:

MAP       MAP_VALUES

KEY       MAP_KEY COLLECTION
------    ------- ----------
first     first   a
second    first   b
          second  c
          second  d
MAP_KEY表中的

MAP_VALUES列是外键,并引用MAP表。


可以按如下方式检索内容:

Parameters entry = em.find(Parameters.class, "second");
List<String> values = entry.values();
...

String query = "SELECT p FROM Parameters p";
List<Parameters> entries = em.createQuery(query, Parameters.class)
                             .getResultList();
List<String> values = entry.values();
...