1. 程式人生 > >eclipse中搭建springboot學習(10)---JPA使用4(多張表 ManyToOne)

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 "刪除成功";
    }