JPA 2 中的映射 Map<Entity, Enum>

Posted

技术标签:

【中文标题】JPA 2 中的映射 Map<Entity, Enum>【英文标题】:Map Map<Entity, Enum> in JPA 2 【发布时间】:2011-11-02 23:25:48 【问题描述】:
@Entity
public class Company 

    public enum CompanyMemberLevel 
        MEMBER, GAME_ADMIN, COMPANY_ADMIN
    

    ...

    private Map<User, CompanyMemberLevel> members = new HashMap<User, CompanyMemberLevel>();

members 是属于公司的Users(另一个实体类)的集合,CompanyMemberLevel 是一个枚举,指定他们在该公司拥有哪些权限(应保存为字符串)。

我应该如何注释members 以实现我想要的?我只能找到关于Map&lt;Basic, Entity&gt; 的示例,反之则不行。还是这张地图的结构有误?

(另外,我能不能更奇怪地映射Map&lt;Entity, Set&lt;Enum&gt;&gt;

【问题讨论】:

【参考方案1】:

具体回答问题:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections-indexed

具体参见第 7.2.2.2 节,并且:

"@MapKeyJoinColumn/@MapKeyJoinColumns 如果映射键类型是另一个实体。"

但是,如果我必须对您要建模的对象进行建模,我宁愿这样做:

class Company 
    @OneToMany private Set<User> users;
    ...


class User 
    @ElementCollection Set<CompanyMemberLevel> memberLevels;
    ...

因为在语义上它更有意义。

【讨论】:

【参考方案2】:

但这适用于 Hibernate 5.4 试试这个

    @ElementCollection
    @CollectionTable(name = "members")
    @Column(name = "role")
    @Enumerated(EnumType.STRING)
    private Map<User, CompanyMemberLevel> members;

在here中描述

【讨论】:

以上是关于JPA 2 中的映射 Map<Entity, Enum>的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JPA 持久化 Map<Entity, Integer>?

JPA Map<String,String> 映射

JPA Map映射

处理来自 JPA/DAO 实体的结果中的非 DB 映射字段

JPA 2.1 中的 @ConstructorResult 映射不能与 Hibernate 4.3.5.Final 一起正常工作

jpa中的可空映射映射