如何在实体类中添加Map <String,Person>?

Nav*_*d S 13 dictionary entity-relationship jpa eclipselink

我想添加一个映射

Map<String, Person> personMap;
Run Code Online (Sandbox Code Playgroud)

在实体类中,实体在哪里Person.的Map是找出确切的Person对应String(让它成为那个人的昵称).同一个人可能有不同的名字,无论何时给出任何名字,Person都必须找到相同的名字.

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

Gon*_*gui 21

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

对于密钥,如果它是基本类型,则@MapKeyColumn可用于自定义密钥的映射列.所以这是我对你的例子的看法:

@OneToMany
@MapKeyColumn(name="person_nickname")
Map<String, Person> personMap;
Run Code Online (Sandbox Code Playgroud)

编辑:

经过一些测试,以下似乎工作得很好:

@ElementCollection
@CollectionTable(name="<name_of_join_table>")
@MapKeyColumn(name="<name_of_map_key_in_table>")
Map<String, Person> personMap;
Run Code Online (Sandbox Code Playgroud)

上面生成了一个包含三个字段的连接表:一个用于映射持有者id,一个用于键,一个用于值.