【发布时间】:2014-06-25 16:31:45
【问题描述】:
如何在不使用 Hibernate 的类的情况下在 JPA 中映射 Map?
public Map<String, String[]> parameters = new HashMap<String, String[]>();
提前致谢。
【问题讨论】:
标签: jpa mapping persistence
如何在不使用 Hibernate 的类的情况下在 JPA 中映射 Map?
public Map<String, String[]> parameters = new HashMap<String, String[]>();
提前致谢。
【问题讨论】:
标签: jpa mapping persistence
一个示例实现:
@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_VALUES 表中的MAP_KEY 列是外键,引用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();
...
【讨论】: