多对多

----------实体类
package com.java.entity;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**

  • @author 一只小瑞瑞

  • 怎么开心怎么来

  • @create 2020-11-27 11:53

  • /
    @Table(name = "JPA_STUDENT")
    @Entity
    public class Student {
    private Integer s_id ;
    private String s_name;

    private Set<teacher> teachers=new HashSet<>();</teacher>

    //进行放弃维护关联关系
    @ManyToMany(mappedBy = "students")
    //排序的方式
    @OrderBy("t_id desc")
    public Set<teacher> getTeachers() {</teacher>

      return teachers;

    }

    public void setTeachers(Set<teacher> teachers) {</teacher>

      this.teachers = teachers;

    }

    @Id //主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) //设置自增
    public Integer getS_id() {

      return s_id;

    }

    public void setS_id(Integer s_id) {

      this.s_id = s_id;

    }

    public String getS_name() {

      return s_name;

    }

    public void setS_name(String s_name) {

      this.s_name = s_name;

    }
    }


package com.java.entity;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**

  • @author 一只小瑞瑞

  • 怎么开心怎么来

  • @create 2020-11-27 11:53

  • /
    @Table(name = "JPA_TEACHER")
    @Entity
    public class Teacher {
    private Integer t_id ;
    private String t_name;

    private Set<student> students=new HashSet<>();</student>

    @Id //主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) //设置自增
    public Integer getT_id() {

      return t_id;

    }

    public void setT_id(Integer t_id) {

      this.t_id = t_id;

    }

    public String getT_name() {

      return t_name;

    }

    public void setT_name(String t_name) {

      this.t_name = t_name;

    }

    //配置中间表的外键
    @JoinTable(

      //中间表的名称
      name = "TEACHER_STUDENT",
      joinColumns = {
          @JoinColumn(
              //进行指定外键 名称 当前数据表主键表的外键  .说白了就是中间的外键
              name = "tea_id",
              //当前表的主键id
              referencedColumnName = "t_id"
          )
      },
      //关向数据表的指定配置的外键
      inverseJoinColumns ={
          @JoinColumn(
              //进行关联的是对象数据表的外键  外键
              name = "stu_id",
              //关联的对象的id
              referencedColumnName = "s_id"
          )
      }

    )
    @ManyToMany
    public Set<student> getStudents() {</student>

      return students;

    }

    public void setStudents(Set<student> students) {</student>

      this.students = students;

    }
    }

-------------------------------测试
package com.java.test;

import com.java.entity.Student;
import com.java.entity.Teacher;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

/**

  • @author 一只小瑞瑞

  • 怎么开心怎么来

  • @create 2020-11-27 12:01

  • 多对多

  • /
    public class Test_Teacher_Stuendt {
    //创建事务对象
    private EntityTransaction transaction;
    //创建entityManager
    private EntityManager entityManager;
    //创建entityManagerFactory 工厂
    private EntityManagerFactory entityManagerFactory ;

    /**

    • Test之前执行

    • */
      @Before
      public void getBefore(){
      //创建工厂
      entityManagerFactory=Persistence.createEntityManagerFactory("jpa-01");
      entityManager=entityManagerFactory.createEntityManager();
      transaction = entityManager.getTransaction();
      //开启事务
      transaction.begin();

      }

      /**

    • Test之后执行

    • */
      @After
      public void getAfter(){

      //提交事务
      transaction.commit();
      //关闭工厂
      entityManager.close();
      entityManagerFactory.close();

      }

/**
 *添加
 */
@Test
public void getVoid(){
    //创建学生对象
    Student student = new Student();
    student.setS_name("海绵宝宝");
    Student student1 = new Student();
    student1.setS_name("派大星");

    //创建教师对象
    Teacher teacher = new Teacher();
    teacher.setT_name("泡芙阿姨");
    Teacher teacher1 = new Teacher();
    teacher1.setT_name("蟹老板");

    //设置关联关系
    student.getTeachers().add(teacher);
    student.getTeachers().add(teacher1);
    student1.getTeachers().add(teacher);
    student1.getTeachers().add(teacher1);

    teacher.getStudents().add(student);
    teacher1.getStudents().add(student1);
    teacher.getStudents().add(student);
    teacher1.getStudents().add(student1);
    //进行保存
    entityManager.persist(teacher);
    entityManager.persist(teacher1);
    entityManager.persist(student);
    entityManager.persist(student1);

}


/**
 删除
 */
@Test
public   void  getVoidDel(){
    Student student = entityManager.find(Student.class, 1);
    entityManager.remove(student);
    //刷新 跟催
    entityManager.flush();

}
/**
 * 修改
 * */
@Test
public   void  getVoidUpd01(){
    Student student = entityManager.find(Student.class, 1);
    student.setS_name("珊迪");
    student.getTeachers().iterator().next().setT_name("海盗船长");

}
/**
 *修改
 **/
@Test
public   void  getVoidUpd(){
    Student student = new Student();
    student.setS_name("小瑞");

    entityManager.persist(student);
}

/**
 查询
 */
@Test
public   void  getVoidSel(){
    Student student = entityManager.find(Student.class, 1);
    System.out.println(student.getS_name());
    for (Teacher teacher : student.getTeachers()) {
        System.out.println(teacher.getT_id() + ":" + student.getS_name());
    }

}

}