• 数据模型与领域模型的关系

    • 领域模型是一个分析模型,它帮助需求分析人员、用户认识现实业务的工具,描述的是业务中设计的试题及其相互之间的关系,它是需求分析的产物。领域模型是需求分析人员与用户交流的有力工具,是需求分析人员与用户共同理解的概念,是彼此间交流的语言。
    • 而数据模型是系统设计、实现的一部分,描述的是用户需求在数据结构上的实现。
    • 数据模型中的概念模型设计与领域模型类似,缺乏的是实体之间更广泛的描述。领域模型设计期间不用考虑数据的管理问题,只需考虑业务描述中涉及的实体与实体之间的关系。
  • 多对一单向关联
  • 多对一双向关联
  • 一对一主键关联
  • 一对一外键关联
  • 多对多关联关系:需要通过另外一张表保存多对多的映射关系
  • 级联操作:数据库操作中常常利用主外键约束来保护数据操作的一致性。例如,在公民表和身份证表的一对一关系中,单独删除公民表中的某条公民信息是不被允许的,需要同时删除身份证表中关联的信息,也就是两个表的操作需要同时进行。
    • 级联操作(cascade)通常是指:当主控方执行save/update或delete操作时,关联对象(被控方)是否进行同步操作。

 

  • 实体集成关系映射

    • 继承是面向对象的重要特性,在Hibernate中是以面向对象的思想进行持久化操作的。因此在Hibernate中,数据表所映射的实体的对象也是可以存在进程关系的,
    • 3种继承映射关系:类继承树映射成一张表; 每个子类映射成一张表; 每个具体类映射成一张表;
  •   类继承树映射成一张表:
      1. <!-- 类继承树的映射配置-->
      2. <hibernate-mapping package="com.mr.person">
      3. <class name="Person" table="tab_person">
      4. <id name="id">
      5. <generator class="native"/ >
      6. </id>
      7.  
      8. <!-- 声明一个鉴别器-->
      9. <discriminator column="type" type="String"/ >
      10. <!-- 映射自有属性-->
      11. <property name="name" not-null="true"/ >
      12. <property name="age" type="int"/ >
      13. <property name="sex" type="string"/ >
      14. <!-- 声明子类 -->
      15. <subClass name="student" discriminator-value="学生">
      16. <property name="school">
      17. </subClass>
      18.  
      19. <subclass name="staffer" discriminator-value="职员">
      20. <property name="company">
      21. </subclass>
      22. </class>
      23. </hibernate>
    • 类继承树映射成一张表会时有一个特殊的限制,即那些由子类属性映射的字段,如student表中的school字段,不能有非空的限制,否则会导致Hibernate数据添加失败。
    • 创建AddPerson,在main()方法中利用session的save()方法分别保存学生实体对象和职员实体对象,关键代码如下:
      1. //Hibernate的持久化操作
      2. session = HibernateInitialize.getsession();
      3. session.beginTransaction(); //事物开启
      4. Student student = new Student();
      5. student.setName("小明");
      6. student.setAge("12");
      7. student.setSex("男");
      8. student.setSchool("明日希望小学");
      9. session.save(student);
      10. Staffer staffer = new Staffer("小红", 25, "女");
      11. staffer.setCompany("明日科技");
      12. session.save(staffer);
      13. session.getTransaction().commit(); //事物提交
  • 每个子类映射成一张表:将每个子类映射成一张表,两个子类映射的表都将通过主键关联到超类映射的数据表,形成一对一的关系。  
      1. <!-- 每个子类的映射配置-->
      2. <hibernate-mapping package="com.mr.person">
      3. <class name="Person" table="tab_person">
      4. <id name="id">
      5. <generator class="native"/ >
      6. </id>
      7.  
      8. <!-- 声明一个鉴别器-->
      9. <discriminator column="type" type="String"/ >
      10. <!-- 映射自有属性-->
      11. <property name="name" not-null="true"/ >
      12. <property name="age" type="int"/ >
      13. <property name="sex" type="string"/ >
      14. <!-- 声明子类 -->
      15. <joined-subclass name="Student" table="tab_student">
      16. <key column="id" />
      17. <property name="school" />
      18. </joined-subclass>
      19.  
      20. <joined-subclass name="Staffer" table="tab_staffer">
      21. <key column="id" />
      22. <property name="company" />
      23. </joined-subclass>
      24. </class>
      25. </hibernate>
  • 每个具体类映射成为一张表:将每个具体类映射成一张表,每个子类的映射表中都含有继承的父类属性映射的字段

      1. <!-- 每个具体类的映射配置-->
      1. <hibernate-mapping package="com.mr.person">
      2. <class name="Person" abstract="true">
      3. <!-- 由于父类不需要映射数据表,因此将abstract属性设置为true-->
      4. <id name="id">
      5. <!-- 设置主键生成策略为手动分配,数据的ID需要在实体对象中的Setter方法中设定-->
      6. <generator class="assigned"/ >
      7. </id>
      8.  
      9. <!-- 声明一个鉴别器-->
      10. <discriminator column="type" type="String"/ >
      11. <!-- 映射自有属性-->
      12. <property name="name" not-null="true"/ >
      13. <property name="age" type="int"/ >
      14. <property name="sex" type="string"/ >
      15. <!-- 声明子类 -->
      16. <!-- union-subclass元素,用于将具体类映射为一张表 -->
      17. <union-subclass name="Student" table="tab_student">
      18. <property name="school" />
      19. </union-subclass>
      20.  
      21. <union-subclass name="Staffer" table="tab_staffer">
      22. <property name="company" />
      23. </union-subclass>
      24. </class>
      25. </hibernate>

Hibernate高级应用的更多相关文章

  1. Hibernate高级查询QBC条件设置——Restrictions用法 引自:http://www.cnblogs.com/evon168/archive/2010/10/29/1863059.html

    方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...

  2. (十一)Hibernate 高级配置

    第一节:配置数据库连接池 反问数据库,需要不断的创建和释放连接,假如访问量大的话,效率比较低级,服务器消耗大: 使用数据库连接池,我们可以根据实际项目的情况,定义连接池的连接个数,从而可以实现从连接池 ...

  3. Hibernate学习11——Hibernate 高级配置(连接池、log4j)

    第一节:配置数据库连接池 这里配置c3p0连接池,需要的jar包: jar包位于hibernate压缩包的:hibernate-release-4.3.5.Final\lib\optional\c3p ...

  4. Hibernate的 Restrictions用法

    方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...

  5. 《精通Hibernate:Java对象持久化技术详解》目录

    图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...

  6. hibernate criteria中Restrictions的用法

    方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...

  7. Hibernate的Restrictions用法

    Restrictions.eq --> equal,等于. Restrictions.allEq --> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restri ...

  8. Hibernate个人总结

    编写Hibernate第一个程序 Hibernate是目前最流行的持久层框架,专注于数据库操作.使用Hibernate框架能够使开发人员从繁琐的SQL语句和复杂的JDBC中解脱出来.Hibernate ...

  9. Atitit.hibernate体系结构大总结

    Atitit.hibernate体系结构大总结 1. 4.1 hibernate基础语义 80  4.1.1 configuration 80  4.1.2 sessionfactory 81  4. ...

随机推荐

  1. vue服务端渲染提取css

    vue服务端渲染,提取css单独打包的好处就不说了,在这里主要说的是抽取css的方法 要从 *.vue 文件中提取 CSS,可以使用 vue-loader 的 extractCSS 选项(需要 vue ...

  2. PHP Laravel 5.4 环境搭建

    1.php运行环境搭建 在win10系统上进行搭建的,使用的是wamp环境  wampserver3_x86_apache2.4.17_mysql5.7.9_php5.6.15.exe,安装包中集成了 ...

  3. GDOI DAY1游记

    今天,是本蒟蒻的第一次参加GDOI,真激动! 今天,是GDOI第一天,昨天熬夜打代码,今天早上状态十分不好,于是... 进入了考场,叫我们自由打一会代码,于是...打了一坨AC机,重要的是错了(额.. ...

  4. golang 三个点的用法

    已经忘了这是第几次查这个用法了,还是记一下吧~ ^ _ ^ 本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/137 ...

  5. 学习CSS

    CSS教程 菜鸟教程 通过使用CSS我们可以大大提升网页开发的工作效率 什么是CSS? CSS指层叠样式表(Cascading Style Sheets) 样式定义如何显示HTML元素 样式通常存储在 ...

  6. WebSocket 的使用

    Java 控制台程序实现类似广播功能 服务器端代码 添加 maven 依赖 <dependency> <groupId>javax.websocket</groupId& ...

  7. 20145202马超 实验二《Java面向对象程序设计》实验报告

    实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...

  8. jsp中的input

    Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍. 1,type=text 输入类型是text,这是我们见的 ...

  9. 1 opencv2.4 + vs2013

    http://blog.csdn.net/poem_qianmo/article/details/19809337 1.安装vs2013 2.安装opencv2.4 下载地址:https://sour ...

  10. nexys4-DDR开发板温度传感器ADT7420U

    1. 用这个板子做个什么功能来学习?板子上有个温度传感器,看下官方是否有例程,板子售价1780元,相当的贵,下面是I2C接口, 看下芯片的引脚图 2. 资料下载地址,得注册账号 https://ref ...