8.多表关系—>多对多查询
#####8.1多对多实体类
package com.xcl.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "student_id")
private Long studentId;
@Column(name = "student_name")
private String studentName;
@Column(name = "student_age")
private String studentAge;
@ManyToMany(cascade = {CascadeType.PERSIST})//级联类型保存
@JoinTable(name="student_grade",
joinColumns = {@JoinColumn(name = "student_id")},
inverseJoinColumns = {@JoinColumn(name = "grade_id")})
private Set<Grade> GradeSet= new HashSet<Grade>(0);
//需要补充getter and setter方法
}
package com.xcl.domain;
import javax.persistence.*;
@Entity
@Table(name = "Grade")
public class Grade {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //主键策略 mysql
@Column(name ="grade_id")
private Long gradeId; //班级ID主键
@Column(name = "grade_name")
private String gradeName;
//需要补充getter and setter方法
}
8.2符合规范的JPA接口
package com.xcl.dao;
import com.xcl.domain.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface StudentDao extends JpaRepository<Student,Long>,JpaSpecificationExecutor<Student> {
}
package com.xcl.dao;
import com.xcl.domain.Grade;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface GradeDao extends JpaRepository<Grade,Long>,JpaSpecificationExecutor<Grade>{
}
8.3测试
package com.xcl;
import com.xcl.dao.GradeDao;
import com.xcl.dao.StudentDao;
import com.xcl.domain.Grade;
import com.xcl.domain.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.HashSet;
import java.util.Set;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:beans.xml")
public class Many2ManyTest {
@Autowired
private StudentDao studentDao;
@Autowired
private GradeDao gradeDao;
/**
* 测试添加一条学生记录
*/
@Test
public void test01(){
//添加学生
Student student = new Student();
student.setStudentName("麻花藤");
//添加班级
Grade grade1 = new Grade();
grade1.setGradeName("作死一班");
//添加班级
Grade grade2 = new Grade();
grade2.setGradeName("作死二班");
//设置学生可以在哪些班级上课
Set<Grade> gradeSet =new HashSet<Grade>();
gradeSet.add(grade1);
gradeSet.add(grade2);
student.setGradeSet(gradeSet);
//执行保存操作
studentDao.save(student); //执行效果,各自插入数据,且建立了中间表关联
}
/**
* 测试删除一条学生记录
*/
@Test
public void test02(){
studentDao.delete(1L); //执行效果,setdent,及中间表删除了,但grade表数据依然存在
}
}