我的java歷程

          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)  編輯  收藏

          Feedback

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

          在你的Student Entity bean 的
          @ManyToMany里加入cascade=CascadeType.PERSIST,fetch=FetchType.EAGER
          這樣就實(shí)現(xiàn)了Many-to-Many的關(guān)系了  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 得荣县| 抚顺县| 安阳县| 玛纳斯县| 乌鲁木齐市| 喀喇| 西青区| 临城县| 皮山县| 棋牌| 楚雄市| 新巴尔虎右旗| 庆安县| 海原县| 西充县| 乌兰浩特市| 惠东县| 淳安县| 平定县| 昌宁县| 莱阳市| 广西| 苏州市| 黄龙县| 临安市| 德格县| 和硕县| 桦川县| 青州市| 龙岩市| 当阳市| 灵宝市| 揭西县| 普兰县| 泽库县| 会同县| 丹巴县| 高安市| 江陵县| 万荣县| 神木县|