【问题标题】:What is the best way to relate this entity关联该实体的最佳方式是什么
【发布时间】:2018-10-01 09:16:01
【问题描述】:

在我的 Spring Boot 应用程序中,我有一个用户实体,它与实体课程多对多相关(一个用户可以注册多门课程,一门课程可以有多个用户) 而实体课程与实体类是一一对应的(一门课有几门课,而一门课只有一门课)

我正在使用 spring boot 做我的应用程序,并且我说用户已经注册了我必须做的课程:

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
}

【问题讨论】:

    标签: java spring-boot jpa spring-data


    【解决方案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

    【讨论】:

    • 这是一个很好的教程,非常感谢。我现在将研究额外的专栏,因为它对我来说是新的
    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多