一个JPA实体中的两个ManyToMany关系

时间:2016-02-18 14:20:05

标签: mysql hibernate jpa entity

我有一个名为User的实体,有两个多对多关系:用户-mtm - 角色用户-mtm - 课程

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(通过Spring Data JPA)将所有内容保存到MySQL数据库

0 个答案:

没有答案