隨筆-61  評(píng)論-159  文章-0  trackbacks-0

          hihernate一對(duì)多關(guān)聯(lián)映射(單向Classes----->Student)

          一對(duì)多關(guān)聯(lián)映射利用了多對(duì)一關(guān)聯(lián)映射原理

          多對(duì)一關(guān)聯(lián)映射:在多的一端加入一個(gè)外鍵指向一的一端,它維護(hù)的關(guān)系是多指向一
          一對(duì)多關(guān)聯(lián)映射:在多的一端加入一個(gè)外鍵指向一的一端,它維護(hù)的關(guān)系是一指向多

          也就是說(shuō)一對(duì)多和多對(duì)一的映射策略是一樣的,只是站的角度不同

          在一一端維護(hù)關(guān)系的缺點(diǎn):
           * 如果將t_student表里的classesid字段設(shè)置為非空,則無(wú)法保存
           * 因?yàn)椴皇窃趕tudent這一端維護(hù)關(guān)系,所以student不知道是哪個(gè)班的,
             所以需要發(fā)出多余的update語(yǔ)句來(lái)更新關(guān)系

          例子:
                  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、測(cè)試方法:
           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("計(jì)算機(jī)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、控制臺(tái)輸出sql語(yǔ)句
          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語(yǔ)句是由于t_student表里面的classesid數(shù)據(jù)更新導(dǎo)致。

          -------------------------------------------------------------------------------------------------
          PS:本博客文章,如果沒(méi)有注明是有“轉(zhuǎn)”字樣,屬于本人原創(chuàng)。如果需要轉(zhuǎn)載,務(wù)必注明作者文章的詳細(xì)出處地址,否則不允許轉(zhuǎn)載,多謝合作!
          posted on 2008-10-11 13:37 apple0668 閱讀(640) 評(píng)論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 晋中市| 宁蒗| 逊克县| 广州市| 枣强县| 黄石市| 沙河市| 酒泉市| 抚顺县| 滨海县| 安阳市| 得荣县| 木兰县| 玉林市| 紫云| 白河县| 黄陵县| 江口县| 红原县| 镶黄旗| 台中市| 施甸县| 唐河县| 绥化市| 北辰区| 进贤县| 古交市| 汝城县| 商水县| 博白县| 西藏| 海盐县| 万宁市| 中宁县| 双鸭山市| 襄樊市| 华宁县| 田林县| 宁明县| 宾阳县| 西昌市|