在我的春季启动应用程序中,我有一个用户实体,它与实体课程有很多关联(一个用户可以注册多个课程,一个课程可以有多个用户) 实体课程与实体课程有一对多关联(一门课程有几门课程,但一门课程只有一门课程)
我正在使用春季启动我的应用程序,并且我说用户已经注册了我必须要做的课程:
user.setCourse(course)
userRepository.save(user)
在将课程与用户联系时,我可以说他已经注册了课程。但是如何将用户与班级联系起来以便知道他完成了哪些课程?对于很多课程来说,我可以利用这种用户关系,或者我必须为很多用户创建一个很多关系?
以下是一个小实例,以更好地举例说明这种关系:
@Entity
public class User{
private long id;
private String name;
private String password;
@ManyToMany(mappedBy = “enrolledUser”, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable
private List enrolledCourse;
//getters and setters
}
@Entity
public class Course{
private long id;
private String name;
private String description;
@ManyToMany(mappedBy = “enrolledCourse”, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable
private List enrolledUser;
@OnetoMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List aulas;
//getters and setters
}
@Entity
public class Class{
private long id;
private String name;
private String content;
@ManyToOne(mappedBy = “class”, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable
private Course course;
//getters and setters
}
答案 0 :(得分:1)
这里有很多不妥之处。首先,你不能这样做:
user.setCourse(course)
userRepository.save(user)
因为我们谈论的是多对多的关系。你会做这样的事情:
user.courses.add(course)
反之亦然
course.users.add(user)
然后您可以保存用户。请按照此处的教程进行操作:
https://www.callicoder.com/hibernate-spring-boot-jpa-many-to-many-mapping-example/
使用List<Course>
之类的通用列表,而不只是List
。实际上我建议在这种情况下使用Set<Course>
。只需按照上面的教程。
您可以将Class
定义为具有所需额外列的连接表。看看这篇文章来定义那些额外的列: