JPA ManyToMany映射
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 * */@Entitypublic 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@GeneratedValuepublic 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 * */@Entitypublic 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@GeneratedValuepublic 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;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((id == null) ? 0 : id.hashCode());return result;}@Overridepublic 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 {/** * 可以通过这种方式生成表 */@Testpublic void makeTable() {EntityManagerFactory factory = Persistence.createEntityManagerFactory("jvwl");factory.close();}/* * 向数据库中放入学生和老师的信息 */@Testpublic 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();}/* * 建立老师和学生的关系 */@Testpublic 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();}/* * 解除老师和学生的关系 */@Testpublic 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();}/* * 删除老师 注:此方法不能删除老师和学生的关系 */@Testpublic 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();}/* * 删除学生 注:此方法能删除学生和老师的关系 */@Testpublic 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();}}?