Java 地图<;实体,枚举>;在JPA2中 @实体 公营公司{ 公共枚举公司成员级别{ 会员、游戏管理员、公司管理员 } ... 私有映射成员=新HashMap();

Java 地图<;实体,枚举>;在JPA2中 @实体 公营公司{ 公共枚举公司成员级别{ 会员、游戏管理员、公司管理员 } ... 私有映射成员=新HashMap();,java,jpa,orm,Java,Jpa,Orm,members是属于公司一部分的Users(另一个实体类)和CompanyMemberLevel枚举的集合,用于指定他们在该公司中拥有的权限(应另存为字符串) 我应该如何注释成员,以实现我的目标?我只能找到有关映射的示例,而不是相反。或者这张映射的结构是错误的 (还有,我能不能更古怪地用mapmap?来具体回答这个问题: 具体见第7.2.2.2节,以及: “@MapKeyJoinColumn/@MapKeyJoinColumns,如果映射键类型是另一个实体。” 但是,如果我必须对您试图建模的对

members
是属于公司一部分的
User
s(另一个实体类)和
CompanyMemberLevel
枚举的集合,用于指定他们在该公司中拥有的权限(应另存为字符串)

我应该如何注释
成员
,以实现我的目标?我只能找到有关
映射
的示例,而不是相反。或者这张映射的结构是错误的


(还有,我能不能更古怪地用map
map

来具体回答这个问题:

具体见第7.2.2.2节,以及:

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

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

@Entity
public class Company {

    public enum CompanyMemberLevel {
        MEMBER, GAME_ADMIN, COMPANY_ADMIN
    }

    ...

    private Map<User, CompanyMemberLevel> members = new HashMap<User, CompanyMemberLevel>();
class公司{
@OneToMany私有集用户;
...
}
类用户{
@元素集合集合成员级别;
...
}
因为从语义上讲,它更有意义。

但这对于Hibernate 5.4来说 试试这个

@ElementCollection
@CollectionTable(name=“members”)
@列(name=“role”)
@枚举(EnumType.STRING)
私人地图会员;
描述

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

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