我的java歷程

          Hibernate EntityManager 多對多持久化

          在應用Hibernate EntityManager進行多對多持久化時,運行TeacherManager時可以同時將Teacher,及Student數據都保存進數據庫,可運行StudentManager時,卻只能將Student數據保存,而Teacher數據并沒有保存到數據庫,為什么只能單向持久化,感覺只實現了一對多雙向關聯的功能,為此感到不解,請熱心的大哥們幫忙解答,看我的代碼是不是哪里寫錯了?謝謝。
          以下是我的代碼:

          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 閱讀(3027) 評論(1)  編輯  收藏

          Feedback

          # re: Hibernate EntityManager 多對多持久化 2007-05-22 15:37 雷克斯

          在你的Student Entity bean 的
          @ManyToMany里加入cascade=CascadeType.PERSIST,fetch=FetchType.EAGER
          這樣就實現了Many-to-Many的關系了  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 新宾| 华阴市| 金寨县| 奉新县| 南京市| 蕉岭县| 滦平县| 游戏| 湘西| 龙州县| 渑池县| 林州市| 阜宁县| 冀州市| 琼结县| 田林县| 珲春市| 定州市| 丰都县| 安吉县| 辽中县| 邵东县| 阿拉善右旗| 高尔夫| 上栗县| 日喀则市| 岱山县| 澄迈县| 金平| 库伦旗| 乌兰浩特市| 隆德县| 西藏| 叶城县| 荃湾区| 礼泉县| 凤庆县| 营山县| 永顺县| 宜黄县| 马公市|