我的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)航:
           
          主站蜘蛛池模板: 合肥市| 临沧市| 富平县| 金华市| 罗平县| 上林县| 上蔡县| 绥江县| 兰坪| 马龙县| 聂拉木县| 道孚县| 辰溪县| 大安市| 东丽区| 甘洛县| 辽源市| 开远市| 凤城市| 仁布县| 高邮市| 绵竹市| 牡丹江市| 南投市| 周口市| 武强县| 沛县| 永福县| 卓尼县| 曲周县| 镇江市| 祁门县| 郧西县| 招远市| 衡山县| 濮阳市| 襄城县| 通州区| 隆子县| 嘉禾县| 凉城县|