Hibernate EntityManager 多對(duì)多持久化
在應(yīng)用Hibernate EntityManager進(jìn)行多對(duì)多持久化時(shí),運(yùn)行TeacherManager時(shí)可以同時(shí)將Teacher,及Student數(shù)據(jù)都保存進(jìn)數(shù)據(jù)庫(kù),可運(yùn)行StudentManager時(shí),卻只能將Student數(shù)據(jù)保存,而Teacher數(shù)據(jù)并沒有保存到數(shù)據(jù)庫(kù),為什么只能單向持久化,感覺只實(shí)現(xiàn)了一對(duì)多雙向關(guān)聯(lián)的功能,為此感到不解,請(qǐng)熱心的大哥們幫忙解答,看我的代碼是不是哪里寫錯(cuò)了?謝謝。
以下是我的代碼:
package com.landril.bean;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
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;
import javax.persistence.Table;
@Entity
@Table(name = "Teacher")
public class Teacher implements Serializable {
?private static final long serialVersionUID = 7772760144352800638L;
?@Id
?@GeneratedValue
?private Integer teacherID;
?private String teacherName;
?
?@ManyToMany(cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
?@JoinTable(name="Tea_Stud",
???joinColumns={@JoinColumn(name="teacherID",referencedColumnName="teacherID")},
???inverseJoinColumns={@JoinColumn(name="studentID",referencedColumnName="studentID")})
?private Set<Student> students = new HashSet<Student>();
?public Integer getTeacherID() {
??return teacherID;
?}
?public void setTeacherID(Integer teacherID) {
??this.teacherID = teacherID;
?}
?public String getTeacherName() {
??return teacherName;
?}
?public void setTeacherName(String teacherName) {
??this.teacherName = teacherName;
?}
?public Set<Student> getStudents() {
??return students;
?}
?public void setStudents(Set<Student> students) {
??this.students = students;
?}
}
package com.landril.bean;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "Student")
public class Student implements Serializable {
?private static final long serialVersionUID = -2778169665228730867L;
?@Id
?@GeneratedValue
?private Integer studentID;
?private String studentName;
?@ManyToMany(mappedBy="students")
?private Set<Teacher> teachers = new HashSet<Teacher>();
?public Integer getStudentID() {
??return studentID;
?}
?public void setStudentID(Integer studentID) {
??this.studentID = studentID;
?}
?public String getStudentName() {
??return studentName;
?}
?public void setStudentName(String studentName) {
??this.studentName = studentName;
?}
?public Set<Teacher> getTeachers() {
??return teachers;
?}
?public void setTeachers(Set<Teacher> teachers) {
??this.teachers = teachers;
?}
}
package com.landril.dao;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.EntityManager;
import com.landril.bean.Student;
import com.landril.bean.Teacher;
public class TeacherManager {
?
?public static void main(String[] args) {
??Teacher t = new Teacher();
??Student s = new Student();
??s.setStudentName("aa");
??Student s1 = new Student();
//??StudentManager sm = new StudentManager();
//??Student s1 = sm.getStudent(2);
??s1.setStudentName("bb");
??Student s2 = new Student();
??s2.setStudentName("cc");
??
??Set<Student> ss = new HashSet<Student>();
??ss.add(s);
??ss.add(s1);
??ss.add(s2);
??t.setTeacherName("tt");
??t.setStudents(ss);
??
??Teacher t1 = new Teacher();
??t1.setTeacherName("tt");
??t1.setStudents(ss);
??
??Teacher t2 = new Teacher();
??t2.setTeacherName("tt");
??t2.setStudents(ss);
??
??TeacherManager tm = new TeacherManager();
??tm.saveTeacher(t);
??tm.saveTeacher(t1);
??tm.saveTeacher(t2);
?}
?
?public void saveTeacher(Teacher tea){
??EntityManager em = Manager.emf.createEntityManager();
??em.getTransaction().begin();
??em.persist(tea);
??em.getTransaction().commit();
??em.close();
?}
?
?public Teacher getTeacher(int id){
??EntityManager em = Manager.emf.createEntityManager();
??return em.find(Teacher.class, new Integer(id));
?}
}
package com.landril.dao;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.EntityManager;
import com.landril.bean.Student;
import com.landril.bean.Teacher;
public class StudentManager {
?public static void main(String[] args) {
//??StudentManager sm = new StudentManager();
//??Student s = sm.getStudent(2);
//??System.out.println(s.getStudentName());
??
??TeacherManager tm = new TeacherManager();
??Teacher t1 = new Teacher();
??t1.setTeacherName("t1");
??Teacher t2 = new Teacher();
??t2.setTeacherName("t2");
??Teacher t3 = new Teacher();
??t3.setTeacherName("t3");
//??Teacher t1 = tm.getTeacher(1);
//??Teacher t2 = tm.getTeacher(3);
//??Teacher t3 = tm.getTeacher(5);
??Set<Teacher> ts = new HashSet<Teacher>();
??ts.add(t1);
??ts.add(t2);
??ts.add(t3);??
??
??Student s = new Student();
??s.setStudentName("ssss");
??s.setTeachers(ts);
??
??StudentManager sm = new StudentManager();
??sm.saveStudent(s);
?}
?
?public void saveStudent(Student s){
??EntityManager em = Manager.emf.createEntityManager();
??em.getTransaction().begin();
??em.persist(s);
??em.getTransaction().commit();
??em.close();
?}
?
?public Student getStudent(int id){
??EntityManager em = Manager.emf.createEntityManager();
??return em.find(Student.class, 1);
?}
}
posted on 2006-11-06 23:39 landril 閱讀(3026) 評(píng)論(1) 編輯 收藏