package com.jvwl.model; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; /** * 学生实体类,关系的维护端 * * @author Jerval * */ @Entity public class Student { private Integer id; private String name; private Set<Teacher> teachers = new HashSet<Teacher>(); public Student() { } public Student(String name) { this.name = name; } @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(length = 10, nullable = false) public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany(cascade = CascadeType.REFRESH) @JoinTable(name = "student_teacher", inverseJoinColumns = @JoinColumn(name = "tid"), joinColumns = @JoinColumn(name = "sid")) public Set<Teacher> getTeachers() { return teachers; } public void setTeachers(Set<Teacher> teachers) { this.teachers = teachers; } public void addTeacher(Teacher teacher) { teachers.add(teacher); } public void removeTeacher(Teacher teacher) { // 要能判断出是否包含在Set中,必须重写Teacher中的hashCode方法和equals方法 if (teachers.contains(teacher)) { teachers.remove(teacher); } } }
package com.jvwl.model; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToMany; /** * 教师实体类 * @author Jerval * */ @Entity public class Teacher { private Integer id; private String name; private Set<Student> students = new HashSet<Student>(); public Teacher() { } public Teacher(String name) { this.name = name; } @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(length = 10, nullable = false) public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany(cascade = CascadeType.REFRESH, mappedBy = "teachers") public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Teacher other = (Teacher) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } }
package junit.test; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.junit.Test; import com.jvwl.model.Student; import com.jvwl.model.Teacher; public class JPATest { /** * 可以通过这种方式生成表 */ @Test public void makeTable() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jvwl"); factory.close(); } /* * 向数据库中放入学生和老师的信息 */ @Test public void addInfo() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jvwl"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.persist(new Teacher("李老师")); em.persist(new Student("蹇伟")); em.persist(new Teacher("王老师")); em.persist(new Student("蹇洁")); em.getTransaction().commit(); em.close(); factory.close(); } /* * 建立老师和学生的关系 */ @Test public void buidTS() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jvwl"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Student student = em.find(Student.class, 1); student.addTeacher(em.getReference(Teacher.class, 1)); em.getTransaction().commit(); em.close(); factory.close(); } /* * 解除老师和学生的关系 */ @Test public void removeTS() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jvwl"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Student student = em.find(Student.class, 1); student.removeTeacher(em.getReference(Teacher.class, 1)); em.getTransaction().commit(); em.close(); factory.close(); } /* * 删除老师 注:此方法不能删除老师和学生的关系 */ @Test public void removeTeacher() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jvwl"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.remove(em.getReference(Teacher.class, 1)); em.getTransaction().commit(); em.close(); factory.close(); } /* * 删除学生 注:此方法能删除学生和老师的关系 */ @Test public void removeStudent() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jvwl"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.remove(em.getReference(Student.class, 1)); em.getTransaction().commit(); em.close(); factory.close(); } }