在JPA 2 </entity,>中映射Map <entity,enum =“”>

时间:2011-11-02 23:25:48

标签: java jpa orm

@Entity
public class Company {

    public enum CompanyMemberLevel {
        MEMBER, GAME_ADMIN, COMPANY_ADMIN
    }

    ...

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

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

我应该如何注释members以达到我想要的效果?我只能找到有关Map<Basic, Entity>的示例,而不是相反。或者这张图是错误的结构吗?

(另外,我可以变得更加怪异并映射Map<Entity, Set<Enum>>吗?

2 个答案:

答案 0 :(得分:2)

具体回答这个问题:

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;
    ...
}

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

答案 1 :(得分:0)

但这对于Hibernate 5.4 试试这个

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

描述here