Hibernate / JPA:map <object,enum =“”> manytomany有可能吗?</object,>

时间:2012-01-06 00:23:55

标签: hibernate jpa map enums annotations

更具体地说是(map<Course, Role>)((User) u).courses

我有许多Course和许多User在课程中Role s。用户可能是一个课程的员工,另一个是学生。

我的用户实体包含ID和具有ID的课程实体,以及角色枚举类型

我想要一个属于用户的地图,以便在特定的类中查询他的角色:

public enum Role{ STUDENT, STAFF }


public class User ... {
...
@ElementCollection(targetClass=Role.class)
@CollectionTable(name="COURSE_ROLE")
@MapKeyJoinColumn(name="COURSE_ID")
@Column(name="ROLE_NAME")
@Enumerated(EnumType.STRING)
private Map<Course, Role> courses;
...

我查看了几个资源。 ProJPA有以下内容:

@Entity
public class Department {
@Id private int id;
private String name;
// ...
@ElementCollection
@CollectionTable(name="EMP_SENIORITY")
@MapKeyJoinColumn(name="EMP_ID")
@Column(name="SENIORITY")
private Map<Employee, Integer> seniorities;
// ...

如果我们将某个部门视为我的用户,而将员工视为我的课程,这几乎可以正常工作,但我不知道如何处理从他们的整数到我的枚举的过渡。

请使用注释帮助我使用此表定义的语义。

编辑:为了澄清,我曾尝试过没有ElementCollection(Role.class)的参数,以及许多其他选项的排列,但我不觉得我正在抓住这种情况。目前,使用此注释组合,我得到一个例外:

org.hibernate.MappingException: Could not determine type for: java.util.Map, at table: USER, 
for columns: [org.hibernate.mapping.Column(ROLE_NAME)]

1 个答案:

答案 0 :(得分:1)

我的作品;我只需要更新我的maven依赖hibernate版本。