【问题标题】:Map Map<Entity, Enum> in JPA 2JPA 2 中的映射 Map<Entity, Enum>
【发布时间】: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;

【问题讨论】:

    标签: java jpa orm


    【解决方案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中描述

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 2010-10-25
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-04
        相关资源
        最近更新 更多