需求分析:学生和教师之间存在多对多的关系java
Student2类:数据库
package cn.dao;session
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;fetch
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;this
@Entity
@Table (name = "student2")
public class Student2 implements Serializable{
private Long id;
private String name;
private String description;
private Set<Teacher> teachers = new HashSet<Teacher>();.net
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
public Long getId() {
return id;
}hibernate
public void setId(Long id) {
this.id = id;
}ip
@Column (name = "name")
public String getName() {
return name;
}rem
public void setName(String name) {
this.name = name;
}get
@Column (name = "description")
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "teacher_student",joinColumns={ @JoinColumn(name = "studentId" ,nullable = false, updatable = false)},inverseJoinColumns={@JoinColumn (name = "teacherId",nullable = false,updatable = false)})
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
}
Teacher 类:
package cn.dao;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table (name = "teacher")
public class Teacher implements Serializable {
private Long id;
private String name;
private String description;
private Set<Student2> students = new HashSet<Student2>();
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "description")
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@ManyToMany
@JoinTable(name = "teacher_student",joinColumns={ @JoinColumn(name = "teacherId",nullable = false,updatable = false)},inverseJoinColumns={ @JoinColumn( name = "studentId",nullable = false,updatable = false)})
public Set<Student2> getStudents() {
return students;
}
public void setStudents(Set<Student2> students) {
this.students = students;
}
}
ManyToMany类:
package cn.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;
import cn.dao.Student2;
import cn.dao.Teacher;
import cn.utils.HibernateUtil;
/** * 多对多的操做 * @author hasee * */ public class ManyToMany { public static void main(String[] args) { edit(); } public static void save(){ //一个学生,拥有多个老师,一个老师,也拥有多个学生 Session session = HibernateUtil.getSession(); Transaction transcation = session.beginTransaction(); Student2 studentOne = new Student2(); studentOne.setName("Amumu"); studentOne.setDescription("This is Amumu"); Set<Teacher> teachers = new HashSet<Teacher>(); Teacher t1 = new Teacher(); Teacher t2 = new Teacher(); t1.setName("Teacher Wang"); t1.setDescription("Teacher Wang is Women"); t2.setName("Teacher Chen"); t2.setDescription("Teacher Chen is Man"); teachers.add(t1); teachers.add(t2); studentOne.setTeachers(teachers); session.save(t1); session.save(t2); session.save(studentOne); transcation.commit(); HibernateUtil.closeSession(); } public static void save2(){ //添加一个学生时,为其添加指定的老师(分析:现数据库里有ID为1和2的老师,把这个学生添加到老师1中) Session session = HibernateUtil.getSession(); Transaction transcation = session.beginTransaction(); Student2 student = new Student2(); student.setName("Jary"); student.setDescription("Jary is a new Student"); //此时Jary指定要到ID为1的老师 Set<Teacher> teachers = new HashSet<Teacher>(); Teacher teacher = (Teacher) session.get(Teacher.class, 12L); teachers.add(teacher); student.setTeachers(teachers);//有点一对多的意思 session.save(student); transcation.commit(); HibernateUtil.closeSession(); } public static void edit(){ //根据学生的ID,改变和原有老师的关联关系 Session session = HibernateUtil.getSession(); Transaction transcation = session.beginTransaction(); Student2 student = (Student2) session.get(Student2.class, 10L);//根据ID查出当前的学生 //查出当前的学生拥有几个老师,打印出老师的名字和ID Set<Teacher> teachers = student.getTeachers(); List<Teacher> list=new ArrayList<Teacher>(teachers); for (Teacher teacher : list) { System.out.println("老师的ID为:"+teacher.getId()+" 老师的名字为:"+teacher.getName()); //解除ID为12,11的老师关联 if(teacher.getId()==12 || teacher.getId()==11){ teachers.remove(teacher); } } teachers = new HashSet<>(list); session.update(student); transcation.commit(); HibernateUtil.closeSession(); } public static void delete(){ Session session = HibernateUtil.getSession(); Transaction transcation = session.beginTransaction(); //直接根据学生ID删除学生 或者 根据 老师ID删除老师 // Student2 student = (Student2) session.get(Student2.class, 4L); // session.delete(student); // Teacher teacher = (Teacher) session.get(Teacher.class, 3L); // session.delete(teacher); //删除ID为4的老师下的所有学生 Teacher teacher = (Teacher) session.get(Teacher.class, 4L); Set<Student2> students = teacher.getStudents(); for (Student2 student2 : students) { session.delete(student2); } transcation.commit(); HibernateUtil.closeSession(); } }