我的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ù)庫,可運(yùn)行StudentManager時(shí),卻只能將Student數(shù)據(jù)保存,而Teacher數(shù)據(jù)并沒有保存到數(shù)據(jù)庫,為什么只能單向持久化,感覺只實(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 閱讀(3027) 評(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)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 望城县| 三河市| 红河县| 大连市| 驻马店市| 墨竹工卡县| 利川市| 兴海县| 台东市| 朝阳县| 宁国市| 二连浩特市| 曲阳县| 乡宁县| 平利县| 长汀县| 峨边| 沈丘县| 乌审旗| 双流县| 喀喇沁旗| 兴隆县| 铜陵市| 九寨沟县| 宁德市| 英山县| 汽车| 磴口县| 青岛市| 东丽区| 和林格尔县| 汉寿县| 丹江口市| 白沙| 大荔县| 中江县| 无为县| 年辖:市辖区| 子洲县| 会东县| 北流市|