Более конкретно (map<Course, Role>)((User) u).courses
У меня много Course
с и много User
с, которые имеют Role
с на курсах. Пользователь может быть сотрудником одного курса, а студент - другим.
У меня есть сущности пользователя с идентификатором ID и сущности курса с идентификатором, а также тип Role Enum
Мне нужна карта, принадлежащая пользователю, для запроса его роли в определенном классе:
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;
// ...
если мы считаем отдел моим пользователем, а сотрудника моим курсом, это почти работает, но я не знаю, как справиться с переходом от их Integer к моему Enum.
Пожалуйста, помогите мне с семантикой этого определения таблицы с аннотациями.
edit: Чтобы уточнить, я пытался без аргумента 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)]