首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

经验9-hibernate 高级映射之组件映射

2012-12-30 
心得9-hibernate 高级映射之组件映射1. 组件映射概述组件类是类型的,它没有对象标识符属性,在数据库中没有

心得9-hibernate 高级映射之组件映射

1. 组件映射概述

    组件类是值类型的,它没有对象标识符属性,在数据库中没有对应的表,它只隶属于另一个持久化类的实例。

  把组件类作为持久化类的单个属性来使用

  把组件类作为持久化类的集合属性来使用

2.组件映射(User-Name)

关联的属性是个复杂类型的持久化类,但不是实体即:数据库中没有表与该属性对应,但该类的属性要永久保存的。

<component name=”name” class=”com.test.hibernate.domain.Name”>

      <property name=”initial”/>

      <property name=”first”/>

      <property name=”last”/>

</component>

当组件的属性不能和表中的字段简单对应的时候可以选择实现:

3.案例分析

把组件类作为持久化类的单个属性来使用

Customers.hbm.xml

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mapping PUBLIC

     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

 

<hibernate-mappingpackage="com.hbsi.component">

 

   <class name="Customers"table="customers">

       <id name="id">

          <generatorclass="native"/>

       </id>

       <propertyname="name"column="name"/>

       

      <componentname="homeAddress"class="Address">

        <propertyname="province"column="home_pro"/>

        <propertyname="city"column="home_city"/>

        <propertyname="zipcode"column="home_zip"/>

        <propertyname="telephone"column="home_tele"/>

      </component>

      

      <componentname="deliverAddress"class="Address">

        <propertyname="province"column="deliver_pro"/>

        <propertyname="city"column="deliver_city"/>

        <propertyname="zipcode"column="deliver_zip"/>

        <propertyname="telephone"column="deliver_tele"/>

      </component>

   </class>

   

</hibernate-mapping>

测试类:TestCustomers.Java

package com.hbsi.component;

 

import org.hibernate.Session;

import org.junit.Test;

 

import com.hbsi.utils.HibernateSessionFactory;

 

public class TestCustomers {

  

   @Test

   public void add(){

      Customers c = new Customers();

      c.setName("张三");

     

      Address homeAddress = new Address();

      homeAddress.setProvince("河北省");

      homeAddress.setCity("保定市");

      homeAddress.setZipcode("071000");

      homeAddress.setTelephone("1235345");

     

      c.setHomeAddress(homeAddress);

     

      Address deliverAddress = new Address();

      deliverAddress.setProvince("四川省");

      deliverAddress.setCity("成都市");

      deliverAddress.setZipcode("032700");

      deliverAddress.setTelephone("1454655645");

     

      c.setDeliverAddress(deliverAddress);

     

      Session session = HibernateSessionFactory.getSession();

      session.beginTransaction();

      session.save(c);

      session.getTransaction().commit();

      HibernateSessionFactory.closeSession();

   }

}

把组件类作为持久化类的集合属性来使用

Album.hbm.xml

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mapping PUBLIC

     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

 

<hibernate-mappingpackage="com.hbsi.component">

 

   <class name="Album"table="ablum">

       <id name="id">

          <generatorclass="native"/>

       </id>

       <propertyname="title"column="title"/>

       

       <bag name="photos"table="photos">

          <keycolumn="ablum_id"/>

          <composite-elementclass="Photos">

             <propertyname="name"/>

             <propertyname="filePath"column="file_path"/>

             <propertyname="describtion"/>

          </composite-element> 

       </bag>

      

   </class>

   

</hibernate-mapping>

 测试类:AblumTest.Java

package com.hbsi.component;

 

import java.util.ArrayList;

import java.util.List;

 

import org.hibernate.Session;

import org.junit.Test;

 

import com.hbsi.utils.HibernateSessionFactory;

 

public class TestAlbum {

  

   @Test

   public void add(){

     

      Album album = new Album();

      album.setTitle("大学时光");

     

      List<Photos> photos = new ArrayList<Photos>();

     

      Photos p1 = new Photos();

      p1.setName("p1");

      p1.setFilePath("d:\\picture");

      p1.setDescribtion("那一年");

     

      Photos p2 = new Photos();

      p2.setName("p2");

      p2.setFilePath("d:\\picture");

      p2.setDescribtion("这些年");

     

      photos.add(p1);

      photos.add(p2);

      album.setPhotos(photos);

     

      Session session = HibernateSessionFactory.getSession();

      session.beginTransaction();

      session.save(album);

      session.getTransaction().commit();

      HibernateSessionFactory.closeSession();

   }

}

热点排行