隨筆-61  評論-159  文章-0  trackbacks-0

          hihernate一對多關聯映射(單向Classes----->Student)

          一對多關聯映射利用了多對一關聯映射原理

          多對一關聯映射:在多的一端加入一個外鍵指向一的一端,它維護的關系是多指向一
          一對多關聯映射:在多的一端加入一個外鍵指向一的一端,它維護的關系是一指向多

          也就是說一對多和多對一的映射策略是一樣的,只是站的角度不同

          在一一端維護關系的缺點:
           * 如果將t_student表里的classesid字段設置為非空,則無法保存
           * 因為不是在student這一端維護關系,所以student不知道是哪個班的,
             所以需要發出多余的update語句來更新關系

          例子:
                  1、Classes的POJO類
          1public class Classes {
          2    private int id;
          3    private String name;
          4    private Set students;
          5//省略setter、getter方法
          6}
                 2、Student的POJO類
          1public class Student {
          2    private int id;
          3    private String name;
          4//省略setter、getter方法
          5}
          3、Classes中的映射文件Classes.hbm.xml
           1<?xml version="1.0"?>
           2<!DOCTYPE hibernate-mapping PUBLIC 
           3    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           4    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
           5<hibernate-mapping package="org.apple.hibernate">
           6    <class name="Classes" table="t_classes" >
           7        <id name="id">
           8            <generator class="native"/>
           9        </id>
          10        <property name="name"/>
          11        <set name="students">
          12            <key column="classesid"/>
          13            <one-to-many class="Student"/>
          14        </set>
          15    </class>
          16</hibernate-mapping>

          4、Student中的映射文件Student.hbm.xml
           1<?xml version="1.0"?>
           2<!DOCTYPE hibernate-mapping PUBLIC 
           3    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           4    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
           5<hibernate-mapping>
           6    <class name="org.apple.hibernate.Student" table="t_student">
           7        <id name="id">
           8            <generator class="native"/>
           9        </id>
          10        <property name="name"/>
          11    </class>
          12</hibernate-mapping>

          5、測試方法:
           1import java.util.HashSet;
           2import java.util.Set;
           3import junit.framework.TestCase;
           4import org.hibernate.Session;
           5
           6public class One2Many1 extends TestCase {
           7    public void testSave(){
           8        Session session = null;
           9        try {
          10            session = HibernateUtil.getSession();
          11            session.beginTransaction();
          12            Student student = new Student();
          13            student.setName("張三");
          14            Student student1= new Student();
          15            student1.setName("李四");
          16            session.save(student);
          17            session.save(student1);
          18            Set students = new HashSet();
          19            students.add(student);
          20            students.add(student1);
          21            Classes classes = new Classes();
          22            classes.setName("計算機04-3");
          23            classes.setStudents(students);
          24            session.save(classes);
          25            session.beginTransaction().commit();
          26            
          27        }
           catch (Exception e) {
          28            e.printStackTrace();
          29            session.beginTransaction().rollback();
          30        }
          finally
          31        {
          32            session.close();
          33        }

          34    }

          35
          36}

          37

          6、控制臺輸出sql語句
          Hibernate: insert into t_student (name) values (?)
          Hibernate: insert into t_student (name) values (?)
          Hibernate: insert into t_classes (name) values (?)
          Hibernate: update t_student set classesid=? where id=?
          Hibernate: update t_student set classesid=? where id=?


          PS:后面兩條update語句是由于t_student表里面的classesid數據更新導致。

          -------------------------------------------------------------------------------------------------
          PS:本博客文章,如果沒有注明是有“轉”字樣,屬于本人原創。如果需要轉載,務必注明作者文章的詳細出處地址,否則不允許轉載,多謝合作!
          posted on 2008-10-11 13:37 apple0668 閱讀(640) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 桃园市| 咸丰县| 曲阜市| 社旗县| 蒲江县| 太湖县| 定兴县| 宝应县| 翁源县| 云浮市| 宾阳县| 尤溪县| 崇仁县| 启东市| 石景山区| 分宜县| 来安县| 柳林县| 波密县| 滕州市| 广宗县| 黔西县| 德阳市| 延寿县| 靖远县| 雷波县| 苗栗县| 平湖市| 尉犁县| 松江区| 阿拉尔市| 齐齐哈尔市| 雷州市| 太保市| 漠河县| 彩票| 天等县| 广安市| 延津县| 江陵县| 桃源县|