eclipse中搭建springboot學習(10)---JPA使用4(多張表 ManyToOne)
新增SchoolDTO
package com.example.demo1025.dto;
import java.io.Serializable;
import java.util.List;import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;@Entity
@Table(name = "school")
public class SchoolDTO implements Serializable {private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;private String schoolName;
// 一個學校對應多個學生,用list
// CascadeType.PERSIST 設定 :級聯 儲存/新建 操作 。新建 學校和學生 的時候,儲存新建的學校那麼新建的學生也同時被儲存
// CascadeType.REMOVE 級聯刪除,學校刪除的時候學生也會被刪除
@OneToMany(mappedBy = "school", cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
private List<StudentDTO> studentList;public int getId() {
return id;
}public void setId(int id) {
this.id = id;
}public String getSchoolName() {
return schoolName;
}public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}public List<StudentDTO> getStudentList() {
return studentList;
}public void setStudentList(List<StudentDTO> studentList) {
this.studentList = studentList;
}}
在 StudentDTO新增school
package com.example.demo1025.dto;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;@Entity
@Table(name = "student")
public class StudentDTO implements Serializable {private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "student_id")
private int id;private String studentName;
// 設定cascade,否則會報錯object references an unsaved transient instance - save the
// transient instance before flushing :
// com.example.demo1025.dto.StudentDTO.score ->
// com.example.demo1025.dto.ScoreDTO
@OneToOne(cascade = CascadeType.ALL)
private ScoreDTO score;// 多個學生對應一個學校
@ManyToOne
private SchoolDTO school;public int getId() {
return id;
}public void setId(int id) {
this.id = id;
}public String getStudentName() {
return studentName;
}public void setStudentName(String studentName) {
this.studentName = studentName;
}public ScoreDTO getScore() {
return score;
}public void setScore(ScoreDTO score) {
this.score = score;
}public SchoolDTO getSchool() {
return school;
}public void setSchool(SchoolDTO school) {
this.school = school;
}}
新增StudentSchoolRepository
package com.example.demo1025.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.demo1025.dto.SchoolDTO;
public interface StudentSchoolRepository extends JpaRepository<SchoolDTO, Integer> {
}
StudentScoreService 新增addSchoolStudent新增方法
@Autowired
private StudentSchoolRepository studentSchoolRepository;/**
* 級聯新增
*/public void addSchoolStudent() {
SchoolDTO schoolDTO = new SchoolDTO();
schoolDTO.setSchoolName("春田花花幼兒園");StudentDTO studentDTO = new StudentDTO();
studentDTO.setStudentName("小花");
studentDTO.setSchool(schoolDTO);StudentDTO studentDTO1 = new StudentDTO();
studentDTO1.setStudentName("小花1");
studentDTO1.setSchool(schoolDTO);List<StudentDTO> studentList = new ArrayList<>();
studentList.add(studentDTO);
studentList.add(studentDTO1);schoolDTO.setStudentList(studentList);
studentSchoolRepository.save(schoolDTO);}
/**
* 級聯刪除
*/
public void deleteSchool() {
studentSchoolRepository.deleteById(21);
}
StuentScoreController 新增addStudentSchool方法
@RequestMapping("addStudentSchool")
@ResponseBody
public String addStudentSchool() {
studentScoreService.addSchoolStudent();
return "新增成功";
}
@RequestMapping("deleteStudentSchool")
@ResponseBody
public String deleteStudentSchool() {
studentScoreService.deleteSchool();
return "刪除成功";
}