2011-09-23 172 views
11

我想添加一个映射,如何在实体类中添加Map <String,Person>?

Map<String, Person> personMap; 

一个实体类,其中Person是实体内。 Map用于识别与String对应的确切的Person(让它成为该人的昵称)。同一个人可能有不同的名字,每当给出任何名字时,必须找到相同的Person

Persistant使用的API是JPA,提供者是EclipseLink。我应该使用什么注释以及如何?

回答

15

根据JSR-317的第2.7节,如果Map的值是一个实体(这是你的情况),则创建一个连接表,然后应该使用OneToMany/ManyToOne注释。

至于密钥,如果它是一个基本类型,@MapKeyColumn可以用来定制密钥的映射列。因此,这里是我对你的例子:

@OneToMany 
@MapKeyColumn(name="person_nickname") 
Map<String, Person> personMap; 

编辑:

经过一番测试,下面似乎工作得很好:

@ElementCollection 
@CollectionTable(name="<name_of_join_table>") 
@MapKeyColumn(name="<name_of_map_key_in_table>") 
Map<String, Person> personMap; 

上述生成包含三个字段连接表:一个用于映射持有者ID,一个用于密钥,另一个用于值。

+0

工程很好,但自动获取不适用于我,当阅读映射项目到地图。 – sealskej

相关问题