Hibernate继承和聚合的实现

Hibernate继承和聚合的实现

 

Hibernate中继承和聚合的实现分别是通过subclass元素和component元素实现的。

 

关于subclass/joined-sunclass/union-subclass元素实现继承介绍请参考文档《Hibernate三种继承关系》链接:http://blog.csdn.net/pursuer211/article/details/17318379

 

下面着重介绍下component元素的使用:

首先描述一下实例场景:

以人Person作为实体,他包含姓名、性别和联系方式等,其中联系方式又包括电话和地址,所以我们可以把联系方式再抽象成一个实体,就叫联系方式Contract。如下图:

    t_person结构如下: 

 

Ø         Person.hbm.xml

<hibernate-mapping
    package="com.red.bean">
 
    <classname="Person"table="t_person">
        <id name="id"column="id"type="integer">
           <generator class="increment"></generator>
        </id>
      
       <propertyname="name"
              column="name"
              type="string"/>
             
        <property name="sex"
                 column="sex"
                 type="string"/>
                
        <component name="contract"
                            class="Contract">
            <property name="tel"
                     column="tel"
                     type="string"/>
                    
            <property name="address"
                     column="address"
                     type="string"/>
        </component>      
       
    </class>
</hibernate-mapping>


Ø        Contract.java

package com.red.bean;
 
import java.io.Serializable;
 
publicclass Contractimplements Serializable {
   
    privatestaticfinallongserialVersionUID = 1L;
   
    private Stringtel ="";
   
    private Stringaddress ="";
 
    public String getTel() {
        returntel;
    }
 
    publicvoid setTel(String tel) {
        this.tel = tel;
    }
 
    public String getAddress() {
        returnaddress;
    }
 
    publicvoid setAddress(String address) {
        this.address = address;
    }
}


Ø         Person.java

package com.red.bean;
 
import java.io.Serializable;
 
publicclass Personimplements Serializable {
   
    privatestaticfinallongserialVersionUID = 1L;
   
    private Integerid = 0;
   
    private Stringname ="";
   
    private Stringsex ="";
   
    private Contractcontract =null;
 
    public Integer getId() {
        returnid;
    }
 
    publicvoid setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        returnname;
    }
 
    publicvoid setName(String name) {
        this.name = name;
    }
 
    public String getSex() {
        returnsex;
    }
 
    publicvoid setSex(String sex) {
        this.sex = sex;
    }
 
    public Contract getContract() {
        returncontract;
    }
 
    publicvoid setContract(Contract contract) {
        this.contract = contract;
    }
}


Ø         TestPersonCase.java

package com.red.test;
 
import java.util.Iterator;
import java.util.List;
 
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
 
import com.red.bean.Contract;
import com.red.bean.Person;
import junit.framework.TestCase;
publicclass TestPersonCaseextends TestCase {
   
    private Sessionsession =null;
    private SessionFactorysf =null;  
 
    protectedvoid setUp()
    {
        try
        {
            Configuration cfg = new Configuration();
            sf = cfg.configure().buildSessionFactory();
            session = sf.openSession();
        }
        catch( HibernateException e)
        {
            e.printStackTrace();
        }
    }
 
    protectedvoid tearDown()
    {
        try
        {
            session.close();
            sf.close();
        }
        catch(HibernateException e)
        {
            e.printStackTrace();
        }
           
     }
   
    publicvoid testInsert()
    {
        try
        {
            Contract contract = new Contract();
            contract.setTel("13888888888");
            contract.setAddress("四川省成都市");
           
            Person person = new Person();
            person.setName("zhanshan");
            person.setSex("1");
            person.setContract(contract);
           
            session.beginTransaction();
            session.save(person);
            session.getTransaction().commit();
        }
        catch (HibernateException e)
        {
            e.printStackTrace();
        }
    }
   
    publicvoid testSelect()
    {
        String personhql = "from com.red.bean.Person";
       
        Query query = null;
        List ls = null;
        Iterator it = null;
        try
        {
            query = session.createQuery(personhql);
            ls = query.list();
           
            if (null == ls || ls.isEmpty())
            {
                return;
            }
           
            it = ls.iterator();
            Person person = null;
           
            while (it.hasNext())
            {
                person = (Person) it.next();
                System.out.println("-----Person name:" + person.getName());
            }
        }
        catch(HibernateException e)
        {
            e.printStackTrace();
        }
    }
}


 

执行TestPersonCase,控制台打印的结果如下:

 

17:33:00,709 DEBUG SQL:393 - select max(id) from t_person
17:33:00,788 DEBUG SQL:393 - insert into t_person (name, sex, tel, address, id) values (?, ?, ?, ?, ?)
17:33:01,147 DEBUG SQL:393 - select person0_.id as id8_, person0_.name as name8_, person0_.sex as sex8_, person0_.tel as tel8_, person0_.address as address8_ from t_person person0_
-----Person name:zhanshan


 

查看表数据

select *fromt_person;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值