Java世界

          學(xué)習(xí)筆記

          常用鏈接

          統(tǒng)計

          積分與排名

          天籟村

          新華網(wǎng)

          雅虎

          最新評論

          hibernate級聯(lián)插入實現(xiàn)多對多

          一個例子 實現(xiàn)多對多的 插入 采用中間表的形式 進(jìn)行操作

          代碼如下:

          teacher table


              create table `test`.`teacher`(
                  `tid` int not null auto_increment,
                 `tname` varchar(40),
                  primary key (`tid`)
              );

              create unique index `PRIMARY` on `test`.`teacher`(`tid`);

          studnt table


              create table `test`.`student`(
                  `sid` int not null auto_increment,
                 `sname` varchar(40),
                  primary key (`sid`)
              );

              create unique index `PRIMARY` on `test`.`student`(`sid`);

          stu_tea_tab table


              create table `test`.`stu_tea_tab`(
                  `tid` int,
                 `sid` int
              );

          ===========================

          teacher.class


          package com.test.beans;

          import java.util.HashSet;
          import java.util.Set;

          public class Teacher
          {
           private Integer tid;

           private String tname;

           private Set students = new HashSet ( );

           

           public Integer getTid()
           {
           
            return tid;
           }

           public void setTid(Integer tid)
           {
           
            this.tid = tid;
           }

           public String getTname()
           {

            return tname;
           }

           public void setTname(String tname)
           {

            this.tname = tname;
           }

           public Set getStudents()
           {

            return students;
           }

           public void setStudents(Set students)
           {

            this.students = students;
           }

          }

          teacher 的配置文件:

          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          " <!--
           Mapping file autogenerated by MyEclipse Persistence Tools
          -->

          <hibernate-mapping>
           <class name="com.test.beans.Teacher" table="teacher">
            <id name="tid" type="java.lang.Integer">
             <column name="tid"></column>
             <generator class="native"></generator>
            </id>
            <property name="tname" type="java.lang.String">
             <column name="tname" length="40"></column>
            </property>
            <set name="students" table="stu_tea_tab" inverse="true" cascade="save-update">
             <key column="tid"></key>
             <many-to-many class="com.test.beans.Student" column="sid"></many-to-many>
            </set>
           </class>

          </hibernate-mapping>

          student.class

          package com.test.beans;

          import java.util.HashSet;
          import java.util.Set;

          public class Student
          {
           private Integer sid;
           private String sname;
           private Set teachers = new HashSet();
           
           
           public String getSname()
           {
           
            return sname;
           }
           public void setSname(String sname)
           {
           
            this.sname = sname;
           }
           public Integer getSid()
           {
           
            return sid;
           }
           public void setSid(Integer sid)
           {
           
            this.sid = sid;
           }
           public Set getTeachers()
           {
           
            return teachers;
           }
           public void setTeachers(Set teachers)
           {
           
            this.teachers = teachers;
           }
           
           
          }

          student.hbm.xml

          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "
          <!--
           Mapping file autogenerated by MyEclipse Persistence Tools
          -->

          <hibernate-mapping>
           <class name="com.test.beans.Student" table="student" >
            <id name="sid" type="java.lang.Integer">
             <column name="sid"></column>
             <generator class="native"></generator>
            </id>
            <property name="sname" type="java.lang.String">
             <column name="sname" length="40"></column>
            </property>
            <set name="teachers"
              table="stu_tea_tab"
              cascade="save-update"

             inverse="false"
             >
             <key column="sid"></key>
             <many-to-many class="com.test.beans.Teacher" column="tid"></many-to-many>
            </set>
           </class>

          </hibernate-mapping>

          hibernatesessionfactory.java

          package com.test.hibernate;

          import org.hibernate.HibernateException;
          import org.hibernate.Session;
          import org.hibernate.cfg.Configuration;

          public class HibernateSessionFactory {
              private static String CONFIG_FILE_LOCATION = "/com/test/hibernate/hibernate.cfg.xml";
           private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
              private  static Configuration configuration = new Configuration();
              private static org.hibernate.SessionFactory sessionFactory;
              private static String configFile = CONFIG_FILE_LOCATION;

           static {
               try {
             configuration.configure(configFile);
             sessionFactory = configuration.buildSessionFactory();
            } catch (Exception e) {
             System.err
               .println("%%%% Error Creating SessionFactory %%%%");
             e.printStackTrace();
            }
              }
              private HibernateSessionFactory() {
              }
           
              public static Session getSession() throws HibernateException {
                  Session session = (Session) threadLocal.get();

            if (session == null || !session.isOpen()) {
             if (sessionFactory == null) {
              rebuildSessionFactory();
             }
             session = (sessionFactory != null) ? sessionFactory.openSession()
               : null;
             threadLocal.set(session);
            }

                  return session;
              }

           public static void rebuildSessionFactory() {
            try {
             configuration.configure(configFile);
             sessionFactory = configuration.buildSessionFactory();
            } catch (Exception e) {
             System.err
               .println("%%%% Error Creating SessionFactory %%%%");
             e.printStackTrace();
            }
           }


              public static void closeSession() throws HibernateException {
                  Session session = (Session) threadLocal.get();
                  threadLocal.set(null);

                  if (session != null) {
                      session.close();
                  }
              }

           
           public static org.hibernate.SessionFactory getSessionFactory() {
            return sessionFactory;
           }

           
           public static void setConfigFile(String configFile) {
            HibernateSessionFactory.configFile = configFile;
            sessionFactory = null;
           }

           public static Configuration getConfiguration() {
            return configuration;
           }

          }

          studentdao.java

          package com.test.daos;

          import org.hibernate.Session;
          import org.hibernate.Transaction;

          import com.test.beans.Student;
          import com.test.hibernate.HibernateSessionFactory;

          public class StudentDao
          {
           public void addStudent(Student student)
           {
            Session session = HibernateSessionFactory.getSession ( );
            
            Transaction tr = session.beginTransaction ( );
            
            session.save ( student );
            

            tr.commit();
            HibernateSessionFactory.closeSession ( );
           }
          }

          測試類:

          package com.test.test;

           

          import com.test.beans.Student;
          import com.test.beans.Teacher;
          import com.test.daos.StudentDao;
          import com.test.daos.TeacherDao;

          public class Test
          {


           public static void main(String args[])
           
           {

            Student stu1 = new Student();
            stu1.setSname ( "stu1" );
            Student stu2 = new Student();
            stu2.setSname ( "stu2" );
            
            Teacher tea1 = new Teacher();
            tea1.setTname ( "tea1" );
            
            Teacher tea2 = new Teacher();
            tea2.setTname ( "tea2" );
            
            stu1.getTeachers ( ).add ( tea1 );
            stu1.getTeachers ( ).add ( tea2 );
            
            stu2.getTeachers ( ).add ( tea1 );
            stu2.getTeachers ( ).add ( tea2 );
            
            StudentDao studentDao = new StudentDao();
            
            studentDao.addStudent ( stu1 ); 
            studentDao.addStudent ( stu2 ); 
           }

          }

          說明:在這里我們采用 學(xué)生 握有主動權(quán)去選擇老師。

          posted on 2010-12-20 15:29 Rabbit 閱讀(1890) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 广汉市| 上饶市| 正镶白旗| 界首市| 大石桥市| 保山市| 文成县| 武城县| 休宁县| 吉首市| 平昌县| 上林县| 兴业县| 光山县| 普格县| 东方市| 南城县| 南汇区| 宝坻区| 文安县| 石屏县| 平南县| 姜堰市| 象山县| 正定县| 随州市| 乐平市| 苗栗市| 江永县| 阿瓦提县| 彭阳县| 宿州市| 宜良县| 汾西县| 罗定市| 眉山市| 滦平县| 阿拉善盟| 耒阳市| 铜梁县| 丽江市|