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
是属于公司的User
s(另一个实体类)的集合,CompanyMemberLevel
是一个枚举,指定他们在该公司拥有哪些权限(应保存为字符串)。
我应该如何注释members
以实现我想要的?我只能找到关于Map<Basic, Entity>
的示例,反之则不行。还是这张地图的结构有误?
(另外,我能不能更奇怪地映射Map<Entity, Set<Enum>>
?
【问题讨论】:
【参考方案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 2.1 中的 @ConstructorResult 映射不能与 Hibernate 4.3.5.Final 一起正常工作