Как сохранить карту со списками в качестве значений, используя аннотации? - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть три модельных класса, Студент, Рабочее место, Неделя, которые я пытаюсь сохранить, используя Annotations. Каждый ученик может иметь несколько рабочих мест в неделю, поэтому в классе ученика есть поле Map<Week, List<Workplace>>. Но я не нахожу решение, чтобы отобразить это в БД.

Мне удалось сохранить @ManyToMany отношения между Student и Workplace, используя JoinTable с Student_id, Workplace_id и Week_id в качестве столбцов в таблице БД, но то, что эти карты - просто поле Map<Week, Workplace> в классе Student.

Вот упрощенные классы моделей с Annotations, которые я в последний раз пробовал. Я получаю ошибку Use of @OneToMany or @ManyToMany targeting an unmapped class: model.Student.studentsWorkplaces[java.util.List].

@Entity
public class Student {
    @Id 
    private Integer id;     
    @ManyToMany
    @JoinTable(name = "STUDENTS_WORKPLACES", 
        joinColumns = @JoinColumn(name = "STUDENT"),
        inverseJoinColumns = @JoinColumn(name = "WEEK"))
    @MapKeyJoinColumn(name = "WORKPLACE")
    private Map<Week, List<Workplace>> studentsWorkplaces;
//      Getters, Setters
}
@Entity
public class Workplace {    
    @Id
    private Integer id;     
    @ManyToMany(mappedBy="studentsWorkplaces")
    private Map<Week, Student> workplaceStudents;
//      Getters, Setters
}
@Entity
public class Week {
    @Id
    private String week_year;   
    @ManyToMany(mappedBy="studentsWorkplaces")
    private List<Student> students;
    @ManyToMany(mappedBy="studentsWorkplaces")
    private List<Workplace> workplaces;
//      Getters, Setters
}

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 14 апреля 2019

Нет JPA не поддерживает это. См. Этот документ https://en.wikibooks.org/wiki/Java_Persistence/Relationships#Nested_Collections.2C_Maps_and_Matrices, который объясняет, почему.

И уже задавали и отвечали в этом вопросе Я хочу отобразить карту <Длинный, Список <POJO>> через JPA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...