java - 如何在SpringBoot中使用带有额外列的新实体保存实体多对多
问题描述
我必须用 Course 实体保存实体 Student,但我有一个额外的实体类 StudentCourse 来放置课程的开始日期和结束日期。如何一次持久化所有数据?到目前为止,这是我的代码:
@Entity
public class Student{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "student_id")
private Integer id;
private String firstName;
private String lastName;
@OneToMany(mappedBy = "student")
Set<StudentCourse> studentCourses;
//have getter and setters and overridden hashCode() and equals
}
@Entity
public class StudentCourse {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne
@JoinColumn(name = "student_id")
Student student;
@ManyToOne
@JoinColumn(name = "course_id")
Course course;
private Date startDate;
private Date endDate;
}
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "course_id")
private Integer id;
private String name;
private String description;
@OneToMany(mappedBy = "course")
Set<StudentCourse> studentCourses;
}
我需要用课程集保存实体学生,还需要将开始日期和结束日期添加到 StudentCourse 表中。我正在使用 JpaRepository 接口。
解决方案
请注意在您的案例cascade
中使用@OneToMany
注释。我建议不要使用它并按照这些步骤来持久化它们。
- 分别持久化
Student
和Course
实例。(我建议ManyToOne
只在联合实体中使用)。 - 在一个新的(也许使用名称更好)实例中建立和之间的关系
Student
并将其持久化。注意,学生和课程实例应该是第一步中的持久化实例。Course
StudentCourse
CourseRegistration
您可以将上述步骤包装在事务范围中。
// dummy codes.
@Service
@Transactional
class SomeService {
public void saveCourseWithStudents(){
var savedCourse = courseRepository.save(course);
var savedStudent = studentRepository.save(student);
studentCourse.setCourse(savedCourse );
studentCourse.setStudent(savedStudent );
studentCourseRepsoitory.save(studentCourse);
}
}
我有一个现有的 Spring Boot 示例(包括详细的测试代码,以及用于持续测试、dockerizing 等的 Github 操作)演示如何以多对多关系设计 Restful API,这与您的情况非常相似,但我@ManyToMany
直接使用了注解.
推荐阅读
- java - 当调用视图模型类尝试从空对象引用android MVVM Java上的字段'androidx.lifecycle.MutableLiveData读取
- javascript - 错误:找不到模块 VueJS 应用程序的声明文件
- javascript - 如何将组件存储在数组中并在需要时在 React 中渲染它们?
- python - Method Not Allowed 请求的 URL 不允许该方法
- python - 带有 PySimpleGUI 列表的窗口中的窗口
- python - Pytest,更改动态传递给标记的计数器
- python - ElementTree 编码错误
- python - 如何通过python在excel文件中查找缺失的日期
- python - Selenium 循环和迭代检查框
- python - Keras 张量流错误:ValueError:应定义“密集”输入的最后一个维度。找到`无`