【问题标题】:How to add a Map<String, Person> in an entity class?如何在实体类中添加 Map<String, Person>?
【发布时间】:2011-11-23 10:19:00
【问题描述】:

我想添加一个映射为

Map<String, Person> personMap;

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

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

【问题讨论】:

    标签: jpa dictionary eclipselink entity-relationship


    【解决方案1】:

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

    对于key,如果是Basic Type,可以使用@MapKeyColumn来自定义key的映射列。所以这是我对你的例子的看法:

    @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,一个为键,一个为值。

    【讨论】:

    • 效果很好,但在将映射项目读入 Map 时,自动获取对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多