关联此实体的最佳方式是什么?

时间:2018-04-20 15:39:53

标签: java spring-boot jpa spring-data

在我的春季启动应用程序中,我有一个用户实体,它与实体课程有很多关联(一个用户可以注册多个课程,一个课程可以有多个用户) 实体课程与实体课程有一对多关联(一门课程有几门课程,但一门课程只有一门课程)

我正在使用春季启动我的应用程序,并且我说用户已经注册了我必须要做的课程:

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
}

1 个答案:

答案 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定义为具有所需额外列的连接表。看看这篇文章来定义那些额外的列:

JPA 2.0 many-to-many with extra column