Save and Update

要存储拥有一对一关系(双向)的实体,作以下操作:

因为依赖关系,我们需要先存储 Student

@PostMapping("/add")
public void addStudent(@RequestBody Student student) {
    student.setId(null);
    student.setTuition(null);
    studentRepository.save(student);
}

存储 Student 时,我们不希望前端设置 id,因为 id 是由 Hibernate 自动生成才对。同时,我们不希望在此时存储 Tuition,因为 Tuition.student_id 依赖于 Studentid,而 Studentid 还未经自动生成,所以无法对 Tuition.student_id 赋值。

然后,我们可以存储 Tuition 信息:

@PostMapping("/setaddr")
public void setStudentAddress(@RequestBody Tuition tuition,
                              @RequestParam Long studentId) {
    Student student = studentRepository.findById(studentId).get();
    tuition.setId(null);
    student.setTuition(tuition);
    tuition.setStudent(student);
    studentRepository.save(student);
    // tuitionRepository.save(tuition);
}

虽然 Hibernate 和 Spring Data JPA 已经非常智能,我们仍然需要自己维护依赖关系。

我们先从数据库拉取 studentId 对应的 Student 实体对象,将其 tuition 设置为传参进来的 tuition,同时把 tuitionstudent 也设置为拉取的 student。这样一来一对一关系就被我们维护的很好了,而 Tuitionid 为自动生成,不应该指定。

由于 studenttuition 都各自拥有关系的全部信息,所以 save(student) 或者 save(tuition) 都是可以的。

最后更新于