您的位置:首页 > 其它

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

2012-12-25 17:59 330 查看
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

<?xml
version="1.0"?>
<!DOCTYPE
hibernate-mapping PUBLIC
     
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
         
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping
package="com.hbsi.component">
 
   
<class
name="Customers"
table="customers">
       
<id
name="id">
          
<generator
class="native"/>
       
</id>
    
   <property
name="name"
column="name"/>
       

      
<component
name="homeAddress"
class="Address">
        
<property
name="province"
column="home_pro"/>
        
<property
name="city"
column="home_city"/>
        
<property
name="zipcode"
column="home_zip"/>
        
<property
name="telephone"
column="home_tele"/>
      
</component>
      

      
<component
name="deliverAddress"
class="Address">
        
<property
name="province"
column="deliver_pro"/>
        
<property
name="city"
column="deliver_city"/>
        
<property
name="zipcode"
column="deliver_zip"/>
        
<property
name="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

<?xml
version="1.0"?>
<!DOCTYPE
hibernate-mapping PUBLIC
     
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
         
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping
package="com.hbsi.component">
 
   
<class
name="Album"
table="ablum">
       
<id
name="id">
          
<generator
class="native"/>
       
</id>
       
<property
name="title"
column="title"/>
       

       
<bag
name="photos"
table="photos">
  
        <key
column="ablum_id"/>
  
        <composite-element
class="Photos">
     
        <property
name="name"/>
     
        <property
name="filePath"
column="file_path"/>
     
        <property
name="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();

   }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: