1.学习目标
   还是学习compenent的用法,上节实现了简单字段的组合,这节中将讨论两个问题:1.依赖对象有一个指向容器对象的引用。2。集合依赖
2.开发环境和必要准备
   开发环境为:windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition
  必要准备:学习前六篇nhibernate学习系列Nhibernate学习之起步篇-1  ,Nhibernate学习起步之many-to-one篇 ,Nhibernate学习之many-to-many篇 ,nhibernate学习之三级联(Ternary Associations)篇 ,Nhibernate学习之性能改善1 ,nhibernate性能之二级缓存篇 ,nhibernate学习之简单组合的映射
3.通过parent为依赖组合对象映射一个指向容器对象的引用
  CompositeUser.cs


public class CompositeUser
    {
        int _uid;
        UserName _name;
        public int Uid
        {
            get
            {
                return _uid;
            }
            set
            {
                _uid = value;
            }
        }

        public UserName Name
        {
            get
            {
                return _name;
            }
            set
            {
                _name = value;
            }
        }
    }

UserName.cs


 public class UserName
    {
        private string _firstName;
        private string _lastName;
        CompositeUser _user;
        public string FirstName
        {
            get
            {
                return _firstName;
            }
            set
            {
                _firstName=value;
            }
        }
        public string LastName
        {
            get
            {
                return _lastName;
            }
            set
            {
                _lastName = value;
            }
        }
        public CompositeUser User
        {
            get
            {
                return _user;
            }
            set
            {
                _user = value;
            }
        }
    }

映射文件:CompositeUser.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompositeUser" lazy="false">
        <id name="Uid" column="Uid" unsaved-value="0">
            <generator class="native" />
        </id>
        <component name="Name" class="NhibernateSample1.UserName,NhibernateSample1">
            <parent name="User"></parent>
            <property name="FirstName" column="FirstName"></property>
            <property name="LastName" column="LastName"></property>
        </component>
    </class>
</hibernate-mapping>

注意parent是指向容器对象的引用
加载一个CompositeUser对象,结果如图

4. 集合组合依赖
Composite.cs


public class CompositeUser
    {
        int _uid;
        UserName _name;
        ISet _userNames = new HashedSet();
        DateTime _birthDay = DateTime.Now;
        public int Uid
        {
            get
            {
                return _uid;
            }
            set
            {
                _uid = value;
            }
        }
        public ISet UserNames
        {
            get
            {
                return _userNames;
            }
            set
            {
                _userNames = value;
            }
        }
        public DateTime BirthDay
        {
            get
            {
                return _birthDay;
            }
            set
            {
                _birthDay = value;
            }
        }
    }

UserName.cs


public class UserName
    {
        private string _firstName;
        private string _lastName;
        CompositeUser _user;
        public string FirstName
        {
            get
            {
                return _firstName;
            }
            set
            {
                _firstName=value;
            }
        }
        public string LastName
        {
            get
            {
                return _lastName;
            }
            set
            {
                _lastName = value;
            }
        }
        public CompositeUser User
        {
            get
            {
                return _user;
            }
            set
            {
                _user = value;
            }
        }
    }

映射文件CompositeUser.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompositeUser" lazy="false">
        <id name="Uid" column="Uid" unsaved-value="0">
            <generator class="native" />
        </id>
        <set name="UserNames" table="UserNames" lazy="true">
            <key column="Uid"/>
            <composite-element  class="NhibernateSample1.UserName,NhibernateSample1">
                <property name="FirstName" column="FirstName"></property>
                <property name="LastName" column="LastName"></property>
            </composite-element >
        </set>
        <property name="BirthDay" type="DateTime"></property>
    </class>
</hibernate-mapping>

注意:Composite可以包含集合也可以不包含集合,上面这样的配置就不包括集合,映射的属性可以选择为List,map,bag,idbag
运行添加一个Composite的测试代码,会在数据库中建立两个数据表 CompositeUser和UserNames
效果图

转载于:https://www.cnblogs.com/wangzhanjianshe/archive/2008/02/21/2326478.html

nhibernate学习之集合组合依赖相关推荐

  1. NHibernate学习笔记(二):one-to-one关系映射

    上一篇:NHibernate学习笔记(一):初识NHibernate 本文的内容:1.介绍NH如何处理对象间one-to-ont的映射关系: 经验教训: 1.操作一对一关联关系中的一个对象时,得在程序 ...

  2. 《强化学习周刊》第12期:强化学习应用之组合优化

    No.12 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,它在组合优化领域中的应用研究进展与成果也引发了众多关注.为帮助研究与工程人员 ...

  3. python学习笔记——集合与字典

    python学习笔记--集合与字典 1. 集合的基本概念 1.1 set(x)函数 1.2 集合类型的10个操作函数 2. 字典的基本概念 2.1 字典的索引 2.2 字典的操作 2.3 字典小结 1 ...

  4. SQL学习之“集合运算”

    本篇文章记录学习SQL集合运算的过程与心得. 对于集合这个概念,印象最深的就是数学课里学的,简单的说就是把研究对象当做元素,则一些元素组成的整体就叫集合. 而在数据库领域,则表示记录的集合,具体来说, ...

  5. 【组合数学】排列组合 ( 排列组合内容概要 | 选取问题 | 集合排列 | 集合组合 )

    文章目录 一.排列组合内容概要 二.选取问题 三.集合排列 四.环排列 五.集合组合 参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排 ...

  6. 强化学习应用于组合优化问题_如何将强化学习应用于现实生活中的计划问题

    强化学习应用于组合优化问题 by Sterling Osborne, PhD Researcher 作者:斯特林·奥斯本(Sterling Osborne),博士研究员 如何将强化学习应用于现实生活中 ...

  7. gradle 上传jar包_Gradle学习记录014 关于依赖的声明

    详细学习Gradle构建的依赖声明.该学习记录基于Gradle官方网站资料.本篇参考链接如下: https://docs.gradle.org/current/userguide/declaring_ ...

  8. Spring集合类型依赖查找

    集合类型依赖查找接口 - ListableBeanFactory 根据 Bean 类型查找 获取同类型 Bean 名称列表 getBeanNamesForType(Class) getBeanName ...

  9. Java学习---day14_集合框架03

    Java学习-day14_集合框架03 Set集合 Set集合中,没有下标的概念 Set集合,是一个去重复的集合.在Set集合中不会添加重复的元素的 在向一个Set集合中添加元素的时候,会先判断这个元 ...

最新文章

  1. 在3D世界中创建不同的相机模式——检查对象是否可见
  2. “远程银行”优秀厂商认证!网易云信入选《区域性银行数字化厂商全景报告》...
  3. android studio下NDK开发
  4. 需要多快的速度,才能在抽走桌布之后保持桌面物体不掉?
  5. vue设置img大小的属性_Vue.js自定义标签属性并获取属性,及绑定img的src属性的坑...
  6. 13产品经理要懂的-人性的恶要怎么利用
  7. (转)MySQL命令行--导入导出数据库
  8. No portmap or rpcbind service is running on this host
  9. 必背单词_考研英语语法如何高效自学? 真题必背单词Day12
  10. pyqt5 登录跳转
  11. 微信统一支付接口返回“签名错误”的可能原因
  12. [Linux实用工具]Windows下同步Linux文件(Linux安装Samba和配置)
  13. 求字符串中ASCII码值最大和ASCII码值最小的字符
  14. MP3中设置播放顺序的软件《闪存式MP3伴侣》
  15. 在计算机系统中 cpu指什么地方,在计算机中cpu指的是什么
  16. Flutter学习(三)
  17. Java计算文章多少字_java计算中文字数的代码实例
  18. 安利7个冷门好用的在线工具,每一个都足够惊艳
  19. 【微信小程序】开发入门篇(一)
  20. Linux下打开chm文件

热门文章

  1. ubuntu 在线安装php,ubuntu在线安装LNMP
  2. android 中断处理流程,Android P的native crash处理流程
  3. php万能查询用预,PHP 与 mysql
  4. 数据结构算法 | 单调栈
  5. leetcode258. 各位相加(简单题,但是你不看答案想不出来)
  6. leetcode66. 加一
  7. leetcode322 零钱兑换
  8. pandasStudyNoteBook
  9. Ubuntu麒麟下搭建FTP服务
  10. Linux操作系统监视NVIDIA的GPU使用情况