隨筆-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 閱讀(696) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 巴彦淖尔市| 江达县| 寻乌县| 乳山市| 梅河口市| 青岛市| 南京市| 通江县| 泰州市| 蓝山县| 万盛区| 耿马| 无极县| 隆尧县| 东乌珠穆沁旗| 杂多县| 西乌| 色达县| 泰安市| 高青县| 屯留县| 福贡县| 鱼台县| 辽阳市| 苗栗市| 新野县| 兴海县| 泌阳县| 离岛区| 滨州市| 正宁县| 南昌县| 理塘县| 社会| 南澳县| 罗城| 赤峰市| 金湖县| 呼伦贝尔市| 涿州市| 景谷|