1.背景介绍:学生和教师之间可以认为是多对多的关系
2.persistence.xml
3.实体bean
Student.java
package com.sinoi.bean;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;@Entitypublic class Student { @Id @GeneratedValue private Integer id; @Column(length=10, nullable=false) private String name; @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) @JoinTable(name="student_teacher", inverseJoinColumns=@JoinColumn(name="tea_id"), joinColumns=@JoinColumn(name="stu_id")) //inverseJoinColumn指向另外一个类对应表的id,而joinColumns指向就是所在这个类对应表的id private Setteachers = new HashSet (); public Student(String name) { this.name = name; } public Student() {} public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getTeachers() { return teachers; } public void setTeachers(Set teachers) { this.teachers = teachers; } public void addTeacher(Teacher teacher) { this.teachers.add(teacher); } public void removeTeacher(Teacher teacher) { if (this.teachers.contains(teacher)) { this.teachers.remove(teacher); } } }
Teacher.java
package com.sinoi.bean;import java.util.HashSet;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToMany;//被维护端@Entitypublic class Teacher { @Id @GeneratedValue private Integer id; @Column(length=10, nullable=false) private String name; @ManyToMany(mappedBy="teachers", fetch=FetchType.LAZY) private Setstudents = new HashSet (); public Teacher(String name) { this.name = name; } public Teacher() {} public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getStudents() { return students; } public void setStudents(Set 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; } }
4.测试
package junit.test;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import org.junit.Test;import com.sinoi.bean.Student;import com.sinoi.bean.Teacher;public class UnitTest { //保存数据 @Test public void save() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("unitname"); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); manager.persist(new Teacher("Mr li")); manager.persist(new Student("bean")); manager.getTransaction().commit(); manager.close(); factory.close(); } //建立联系 @Test public void buildST() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("unitname"); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); //需要无参构造函数,否则会出现错误 Teacher teacher = manager.getReference(Teacher.class, 1); Student student = manager.getReference(Student.class, 1); student.addTeacher(teacher); manager.getTransaction().commit(); manager.close(); factory.close(); } //解除教师与学生关系 @Test public void deleteTeacher() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("unitname"); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); Teacher teacher = manager.getReference(Teacher.class, 1); Student student = manager.getReference(Student.class, 1); student.removeTeacher(teacher); manager.getTransaction().commit(); manager.close(); factory.close(); } //删除学生 //注:如果要删除老师,得先将解除老师和学生之间的关系,然后再删除老师 @Test public void deleteStudent() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("unitname"); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); Student student = manager.getReference(Student.class, 1); manager.remove(student); manager.getTransaction().commit(); manager.close(); factory.close(); }}