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

          在hibernate中,component是某個實體的邏輯組成部分,它與實體的根本區別是沒有oid,
          component可以成為是值對象(DDD)

          采用component映射的好處:它實現了對象模型的細粒度劃分,層次會更分明,復用率會更高。

          例子:一個用戶類,包含比較多的用戶信息,姓名、地址、電子郵件、郵編、電話等等,因此這樣如果只集中一個POJO類的話,就造成對象模型的力度比較粗,因此有必要重新劃分對象粒度,提供程序運行效率。

          因此把User劃分為User和Contact兩個類

          1、User的POJO類

          public class User {
           private int id;
           private String name;
           private Contact contact;

          //省略setter、getter方法
          }
          2、從User中劃分出來的Contact類

          public class Contact {
           private String email;
           private String address;
           private String zipCode;
           private String contactTel;

          //省略setter、getter方法
          }
          3、User的映射文件User.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="User" table="t_user">
           7        <id name="id">
           8            <generator class="native"/>
           9        </id>
          10         <property name="name"/>
          11         <component name="contact">
          12             <property name="email"/>
          13             <property name="address"/>
          14             <property name="zipCode"/>
          15             <property name="contactTel"/>
          16         </component>
          17    </class>
          18</hibernate-mapping>

          4、數據庫表結構:

          mysql> desc t_user;
          +------------+--------------+------+-----+---------+----------------+
          | Field      | Type         | Null | Key | Default | Extra          |
          +------------+--------------+------+-----+---------+----------------+
          | id              | int(11)           | NO    | PRI | NULL   | auto_increment |
          | name         | varchar(255) | YES  |        | NULL    |                         |
          | email         | varchar(255) | YES  |        | NULL    |                         |
          | address     | varchar(255) | YES  |        | NULL    |                         |
          | zipCode    | varchar(255) | YES  |        | NULL    |                         |
          | contactTel | varchar(255) | YES  |        | NULL    |                         |
          +------------+--------------+------+-----+---------+----------------+
          6 rows in set (0.02 sec)

          5、測試方法:
           1public void testSave1()
           2    {
           3        Session session = null;
           4        try {
           5            session = HibernateUtil.getSession();
           6            session.beginTransaction();
           7            User u = new User();
           8            u.setName("張三");
           9            Contact contact = new Contact();
          10            contact.setAddress("********");
          11            contact.setEmail("*****@163.com");
          12            contact.setZipCode("000000000");
          13            contact.setContactTel("1234567890");
          14            u.setContact(contact);
          15            session.save(u);
          16            session.beginTransaction().commit();
          17        }
           catch (Exception e) {
          18            e.printStackTrace();
          19            session.beginTransaction().rollback();
          20        }
          finally{
          21            session.close();
          22        }

          23        
          24    }

          PS、由于Contact沒有映射文件,在User中使用了Component映射標簽,加入Contact里面的屬性,所以在測試方法里面不用調用session.save(contact);,只調用第15行中的u.setContact(contact);即可。

          -------------------------------------------------------------------------------------------------
          PS:本博客文章,如果沒有注明是有“轉”字樣,屬于本人原創。如果需要轉載,務必注明作者文章的詳細出處地址,否則不允許轉載,多謝合作!
          posted on 2008-10-23 23:19 apple0668 閱讀(698) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 武陟县| 合阳县| 泊头市| 会泽县| 贡觉县| 天等县| 长沙市| 苗栗县| 建阳市| 新竹县| 宁蒗| 通河县| 丰县| 清丰县| 广汉市| 百色市| 江口县| 北碚区| 邵东县| 肥西县| 龙胜| 泌阳县| 襄汾县| 泽库县| 封开县| 沂源县| 太原市| 大冶市| 连南| 高州市| 麻阳| 南京市| 雅安市| 琼中| 阿城市| 麟游县| 和平区| 穆棱市| 盖州市| 安乡县| 双流县|