Hibernate的映射(组件)

1. Model(src/test/Person.java)

public class Person{
    private Integer id;
    private int age;
    private Name name;//1. 组件属性name
    private Map<String , Name> nicks = new HashMap<String , Name>(); //3.集合属性为组件
    
    .............//setter和getter方法
}

2. 组件(src/test/Name.java)

public class Name{
    private String first;
    private String last;
    private Person owner;//引用拥有该Name的Person对象
    private Map<String ,Integer> power = new HashMap<String ,Integer>();//2. 组件属性为集合
    
    public Name(){}
    //初始化first、last属性的构造器
    public Name(String first , String last){
        this.first = first;
        this.last = last;
    }
    .....//属性的setter和getter方法
}

3. 映射文件(src/test/hibernate.cfg.xml)

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="test">
    <class name="Person" table="person_inf">
        <!-- 映射标识属性 -->
        <id name="id" column="person_id">
            <!-- 指定主键生成器策略 -->
            <generator class="identity"/>
        </id>
        <!-- 映射普通属性 -->
        <property name="age" type="int"/>
        <!-- 1. 映射组件属性name,组件属性的类型为Name -->
        <component name="name"
            class="Name" unique="true">
            <!-- 指定owner属性代表容器实体 -->
            <parent name="owner"/>
            <!-- 映射组件属性的first属性 -->
            <property name="first"/>
            <!-- 映射组件属性的last属性 -->
            <property name="last"/>
            
            <!-- 2. 映射组件属性里的Map集合属性 -->
            <map name="power" table="name_power">
                <!-- 映射集合属性数据表的外键列 -->
                <key column="person_name_id" not-null="true"/>
                <!-- 映射集合属性数据表的Map key列 -->
                <map-key column="name_aspect" type="string"/>
                <!-- 映射保存集合元素的数据列 -->
                <element column="name_power" type="int"/>
            </map>
        </component>
        
        <!-- 3. 映射nicks集合属性,集合属性对应的数据表为nick_inf -->
        <map name="nicks" table="nick_inf">
            <!-- 映射集合属性数据表的外键列 -->
            <key column="person_id" not-null="true"/>
            <!-- 映射集合属性数据表的Map key列 -->
            <map-key column="phase" type="string"/>
            <!-- 映射保存集合里的组件元素 -->
            <composite-element class="Name">
                <!-- 指定owner属性代表容器实体 -->
                <parent name="owner"/>
                <!-- 映射组件属性的first属性 -->
                <property name="first"/>
                <!-- 映射组件属性的last属性 -->
                <property name="last"/>
            </composite-element>
        </map>
    </class>
</hibernate-mapping>

4. 测试类(工具类如上一篇博客)
public class PersonManager{
    public static void main(String[] args){
        PersonManager mgr = new PersonManager();
        mgr.createAndStorePerson();
        HibernateUtil.sessionFactory.close();
    }
    
    private void createAndStorePerson()
    {
        Session session = HibernateUtil.currentSession();
        Transaction tx = session.beginTransaction();
        //创建Person对象
        Person yeeku = new Person();
        //为Person对象设置属性
        yeeku.setAge(29);
        //1. 组件属性name
        Name n = new Name("crazyit.org" , "疯狂Java联盟");
        
        //2. 组件属性为集合
        Map<String ,Integer> power = new HashMap<String ,Integer>();
        power.put("运气" , 96);
        power.put("智慧" , 98);
        n.setPower(power);
        yeeku.setName(n);
        
        //3. 集合属性为组件
        //创建一个Map集合
        Map<String , Name> nicks = new HashMap<String , Name>();
        nicks.put("幼年" , new Name("Wawa" , "Wawa"));
        nicks.put("成年" , new Name("Yeeku" , "Lee"));
        yeeku.setNicks(nicks);
        session.save(yeeku);
        tx.commit();
        HibernateUtil.closeSession();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值