我想将映射添加为
Map<String, Person> personMap;
在实体类中,其中Person
是实体。 Map
用于标识与Person
对应的确切String
(让它成为该人的昵称)。同一个人可能有不同的名字,无论何时给出任何名字,都必须找到相同的Person
。
使用的Persistance API是JPA,提供者是EclipseLink。我应该使用什么注释以及如何使用?
答案 0 :(得分:19)
根据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,一个用于键,一个用于值。