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

18 篇文章 0 订阅
18 篇文章 1 订阅

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();

   }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值