如何使用注释将具有列表作为值的地图持久化?

时间:2019-04-13 20:38:09

标签: java mysql hibernate jpa

我有三个模型班,学生班,工作场所班,周班,我尝试使用Annotations坚持下去。每个学生每周可以有多个工作场所,因此,学生班级有一个字段Map<Week, List<Workplace>>。但是我找不到将其映射到数据库中的解决方案。

我确实使用@ManyToMany并在DB表中将Student_id,Workplace_id和Week_id作为列来保持了JoinTable与学生和工作场所之间的关系,但是映射的只是字段{{1} }在班级的学生中。

这是我上次尝试使用的Map<Week, Workplace>的简化模型类。我得到的错误是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
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

没有JPA不支持。请参阅此文档https://en.wikibooks.org/wiki/Java_Persistence/Relationships#Nested_Collections.2C_Maps_and_Matrices,其中解释了原因。

并且已经在该问题I want to map a Map<Long, List<POJO>> through JPA

中被问及回答了