我有一个名为User的实体,它有两个多对多关系: User -mtm - RoleUser -mtm - Course

public class User {

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "users_roles",
            joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")})
    private List<Role> userRoles;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "users_courses",
            joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "course_id", referencedColumnName = "id")})
    private List<Course> orderedCourses;
}

在课程实体中:

public class Course  {

    @ManyToMany(mappedBy = "orderedCourses")
    private List<User> participants;

}

它在 Role 实体中看起来很相似 .

当用户使用例如分配的两个角色将自己注册到某个课程(意味着课程被添加到他的 orderedCourses 列表中),他获得了两次这门课程 . 因此,具有两个角色的用户两次注册相同的课程,具有3个角色的用户获得三次等 .

它在数据库的联结表中很明显 . (一个用户有几次相同的课程是不可接受的) .

看起来一个 ManyToMany 关系会对另一个人产生影响 . 但我不知道出了什么问题 . 一切都由Hibernate持久保存到MySQL数据库(通过Spring Data JPA)