[原创]类集合包含的Hibernate映射

Junglesong 发表于 2007-11-10 12:16:27

类集合包含意味着一个类中的成员变量是另一个类的集合,比如说公司类Company包含成员类Member的集合.

类图如下:


它们分别对应数据库中的Companys表和Members表,它们的ER图如下:

以下代码演示了如何将类与数据库映射起来:

Company类代码:
package com.sitinspring.companymember;

import java.util.HashSet;
import java.util.Set;

public class Company{
    
private long id;
    
private String name;
    
private Set<Member> members = new HashSet<Member>();    
    
    
public Company(){
    }

    
    
public Company(long id,String name){
        
this.id=id;
        
this.name=name;
    }

    
    
public void add(Member member){
        member.setCid(id);
        members.add(member);
    }

    
    
public String toString(){
        String retval
="Company id="+id+" name="+name;
        
        
for(Member member:members){
            retval
+="\n"+member;
        }

        
        
return retval;
    }

    
    
public long getId() {
        
return id;
    }

    
public void setId(long id) {
        
this.id = id;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }


    
public Set<Member> getMembers() {
        
return members;
    }


    
public void setMembers(Set<Member> members) {
        
this.members = members;
    }

}

Company.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="org.hibernate.auction">
    
<class name="com.sitinspring.companymember.Company" table="COMPANYS">
        
<id name="id" column="ID"/>
        
<property name="name" column="NAME" />
        
        
<set name="members" inverse="true" cascade="all" lazy="false">
            
<key column="CID" />
            
<one-to-many class="com.sitinspring.companymember.Member" />
        
</set>
    
</class>
</hibernate-mapping>

Member类代码:
package com.sitinspring.companymember;

public class Member {
    
private long id;

    
private long cid;

    
private String name;

    
public Member() {
    }

    
    
public Member(long id, String name) {
        
this.id = id;
        
this.name = name;
    }

    
    
public String toString(){
        
return "Member id="+id+" cid="+cid+" name="+name;
    }


    
public long getId() {
        
return id;
    }


    
public void setId(long id) {
        
this.id = id;
    }


    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }


    
public long getCid() {
        
return cid;
    }


    
public void setCid(long cid) {
        
this.cid = cid;
    }

}

Member.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="org.hibernate.auction">
    
<class name="com.sitinspring.companymember.Member" table="MEMBERS">
        
<id name="id" column="ID"/>
        
<property name="cid" column="CID" />
        
<property name="name" column="NAME" />
    
</class>
</hibernate-mapping>

测试代码如下:
package com.sitinspring.companymember;

import org.hibernate.Session;

import com.sitinspring.util.HibernateUtil;

public class Main {
    
public static void main(String[] args) {
        Session session 
= HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        
// --插入代码开始
        Company citi = new Company(1"Citi");
        citi.add(
new Member(10"Andy"));
        citi.add(
new Member(11"Bill"));
        session.save(citi);

        Company google 
= new Company(2"google");
        google.add(
new Member(20"Cindy"));
        google.add(
new Member(21"Dennis"));
        session.save(google);

        session.flush();

        Company company 
= (Company) session.load(Company.class, citi.getId());
        company 
= (Company) session.load(Company.class, google.getId());
        
// --插入代码结束

        
// --读取代码开始
        long i = 1;

        Company companyLoaded 
= (Company) session.load(Company.class, i);
        System.out.println(companyLoaded);
        i 
= 2;
        companyLoaded 
= (Company) session.load(Company.class, i);
        System.out.println(companyLoaded);
        
// --读取代码开始

        session.getTransaction().commit();
        HibernateUtil.getSessionFactory().close();
    }

}

测试结果:




代码下载:
http://www.blogjava.net/Files/sitinspring/HibernateClasses20071109085612.rar
收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定