浏览 3949 次
锁定老帖子 主题:JPA 多对多实例配置
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-08
最后修改:2009-11-08
@Entity public class Student { private Integer s_id; private String s_name; private Set<Teacher> teachers = new HashSet<Teacher>(); public Student() { } public Student(String s_name) { this.s_name = s_name; } @Id @GeneratedValue public Integer getS_id() { return s_id; } public void setS_id(Integer s_id) { this.s_id = s_id; } @Column(nullable = false, length = 20) public String getS_name() { return s_name; } public void setS_name(String s_name) { this.s_name = s_name; } @ManyToMany(mappedBy = "students") public Set<Teacher> getTeachers() { return teachers; } public void setTeachers(Set<Teacher> teachers) { this.teachers = teachers; } @Override public int hashCode() { final int PRIME = 31; int result = 1; result = PRIME * result + ((s_id == null) ? 0 : s_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; final Student other = (Student) obj; if (s_id == null) { if (other.s_id != null) return false; } else if (!s_id.equals(other.s_id)) return false; return true; } }
@Entity public class Teacher { private Integer t_id; private String t_name; private Set<Student> students = new HashSet<Student>(); public Teacher() { } public Teacher(String t_name) { this.t_name = t_name; } @Id @GeneratedValue public Integer getT_id() { return t_id; } public void setT_id(Integer t_id) { this.t_id = t_id; } @Column(nullable = false, length = 20) public String getT_name() { return t_name; } public void setT_name(String t_name) { this.t_name = t_name; } @ManyToMany() @JoinTable(name = "student_teacher", inverseJoinColumns = @JoinColumn(name = "student_id"), joinColumns = @JoinColumn(name = "teacher_id")) public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } /** * 添加学生 * * @param stu */ public void addStudent(Student stu) { this.students.add(stu); } /** * 删除学生 * @param stu */ public void removeStudent(Student stu) { if(this.students.contains(stu)){ this.students.remove(stu); } } } 测试如下: public class JPA_ManyToManyTest { @Test public void manyTomany() throws Exception { EntityManagerFactory factory = Persistence .createEntityManagerFactory("mengya"); factory.close(); } /** * 保存数据并建立关系 * * @throws Exception */ @Test public void save() throws Exception { EntityManagerFactory factory = Persistence .createEntityManagerFactory("mengya"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Teacher teacher = new Teacher("梦娅"); Student stu = new Student("张明学"); // 建立关系 teacher.addStudent(stu); em.persist(stu); em.persist(teacher); em.getTransaction().commit(); em.close(); factory.close(); } /** * 解除关系 * */ @Test public void removeTeacherStudent() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("mengya"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Teacher t = em.find(Teacher.class, 1); t.removeStudent(em.getReference(Student.class, 1)); em.getTransaction().commit(); em.close(); factory.close(); } @Test public void deleteStudentTeacher() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("mengya"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.remove(em.getReference(Student.class, 1)); em.remove(em.getReference(Teacher.class, 1)); em.getTransaction().commit(); em.close(); factory.close(); } // 操作成功 @Test public void deleteTeacherStudent() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("mengya"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.remove(em.getReference(Teacher.class, 2)); em.remove(em.getReference(Student.class, 2)); em.getTransaction().commit(); em.close(); factory.close(); } // 操作成功 /** * 删除失败,学生是关系被维护端无权更新外键 * */ @Test public void deleteStudent() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("mengya"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.remove(em.getReference(Student.class, 3)); em.getTransaction().commit(); em.close(); factory.close(); } /** * 删除成功,老师是关系维护端有权更新外键 * */ @Test public void deleteTeacher() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("mengya"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.remove(em.getReference(Teacher.class, 3)); em.getTransaction().commit(); em.close(); factory.close(); } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |