Hibernate高级应用
- 数据模型与领域模型的关系
- 领域模型是一个分析模型,它帮助需求分析人员、用户认识现实业务的工具,描述的是业务中设计的试题及其相互之间的关系,它是需求分析的产物。领域模型是需求分析人员与用户交流的有力工具,是需求分析人员与用户共同理解的概念,是彼此间交流的语言。
- 而数据模型是系统设计、实现的一部分,描述的是用户需求在数据结构上的实现。
- 数据模型中的概念模型设计与领域模型类似,缺乏的是实体之间更广泛的描述。领域模型设计期间不用考虑数据的管理问题,只需考虑业务描述中涉及的实体与实体之间的关系。
- 多对一单向关联
- 多对一双向关联
- 一对一主键关联
- 一对一外键关联
- 多对多关联关系:需要通过另外一张表保存多对多的映射关系
- 级联操作:数据库操作中常常利用主外键约束来保护数据操作的一致性。例如,在公民表和身份证表的一对一关系中,单独删除公民表中的某条公民信息是不被允许的,需要同时删除身份证表中关联的信息,也就是两个表的操作需要同时进行。
- 级联操作(cascade)通常是指:当主控方执行save/update或delete操作时,关联对象(被控方)是否进行同步操作。
- 实体集成关系映射
- 继承是面向对象的重要特性,在Hibernate中是以面向对象的思想进行持久化操作的。因此在Hibernate中,数据表所映射的实体的对象也是可以存在进程关系的,
- 3种继承映射关系:类继承树映射成一张表; 每个子类映射成一张表; 每个具体类映射成一张表;
- 类继承树映射成一张表:
<!-- 类继承树的映射配置-->
<hibernate-mapping package="com.mr.person">
<class name="Person" table="tab_person">
<id name="id">
<generator class="native"/ >
</id> <!-- 声明一个鉴别器-->
<discriminator column="type" type="String"/ >
<!-- 映射自有属性-->
<property name="name" not-null="true"/ >
<property name="age" type="int"/ >
<property name="sex" type="string"/ >
<!-- 声明子类 -->
<subClass name="student" discriminator-value="学生">
<property name="school">
</subClass> <subclass name="staffer" discriminator-value="职员">
<property name="company">
</subclass>
</class>
</hibernate>- 类继承树映射成一张表会时有一个特殊的限制,即那些由子类属性映射的字段,如student表中的school字段,不能有非空的限制,否则会导致Hibernate数据添加失败。
- 创建AddPerson,在main()方法中利用session的save()方法分别保存学生实体对象和职员实体对象,关键代码如下:
//Hibernate的持久化操作
session = HibernateInitialize.getsession();
session.beginTransaction(); //事物开启
Student student = new Student();
student.setName("小明");
student.setAge("12");
student.setSex("男");
student.setSchool("明日希望小学");
session.save(student);
Staffer staffer = new Staffer("小红", 25, "女");
staffer.setCompany("明日科技");
session.save(staffer);
session.getTransaction().commit(); //事物提交
- 每个子类映射成一张表:将每个子类映射成一张表,两个子类映射的表都将通过主键关联到超类映射的数据表,形成一对一的关系。
<!-- 每个子类的映射配置-->
<hibernate-mapping package="com.mr.person">
<class name="Person" table="tab_person">
<id name="id">
<generator class="native"/ >
</id> <!-- 声明一个鉴别器-->
<discriminator column="type" type="String"/ >
<!-- 映射自有属性-->
<property name="name" not-null="true"/ >
<property name="age" type="int"/ >
<property name="sex" type="string"/ >
<!-- 声明子类 -->
<joined-subclass name="Student" table="tab_student">
<key column="id" />
<property name="school" />
</joined-subclass> <joined-subclass name="Staffer" table="tab_staffer">
<key column="id" />
<property name="company" />
</joined-subclass>
</class>
</hibernate>
- 每个具体类映射成为一张表:将每个具体类映射成一张表,每个子类的映射表中都含有继承的父类属性映射的字段
<!-- 每个具体类的映射配置-->
<hibernate-mapping package="com.mr.person">
<class name="Person" abstract="true">
<!-- 由于父类不需要映射数据表,因此将abstract属性设置为true-->
<id name="id">
<!-- 设置主键生成策略为手动分配,数据的ID需要在实体对象中的Setter方法中设定-->
<generator class="assigned"/ >
</id> <!-- 声明一个鉴别器-->
<discriminator column="type" type="String"/ >
<!-- 映射自有属性-->
<property name="name" not-null="true"/ >
<property name="age" type="int"/ >
<property name="sex" type="string"/ >
<!-- 声明子类 -->
<!-- union-subclass元素,用于将具体类映射为一张表 -->
<union-subclass name="Student" table="tab_student">
<property name="school" />
</union-subclass> <union-subclass name="Staffer" table="tab_staffer">
<property name="company" />
</union-subclass>
</class>
</hibernate>
Hibernate高级应用的更多相关文章
- Hibernate高级查询QBC条件设置——Restrictions用法 引自:http://www.cnblogs.com/evon168/archive/2010/10/29/1863059.html
方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...
- (十一)Hibernate 高级配置
第一节:配置数据库连接池 反问数据库,需要不断的创建和释放连接,假如访问量大的话,效率比较低级,服务器消耗大: 使用数据库连接池,我们可以根据实际项目的情况,定义连接池的连接个数,从而可以实现从连接池 ...
- Hibernate学习11——Hibernate 高级配置(连接池、log4j)
第一节:配置数据库连接池 这里配置c3p0连接池,需要的jar包: jar包位于hibernate压缩包的:hibernate-release-4.3.5.Final\lib\optional\c3p ...
- Hibernate的 Restrictions用法
方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...
- 《精通Hibernate:Java对象持久化技术详解》目录
图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...
- hibernate criteria中Restrictions的用法
方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...
- Hibernate的Restrictions用法
Restrictions.eq --> equal,等于. Restrictions.allEq --> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restri ...
- Hibernate个人总结
编写Hibernate第一个程序 Hibernate是目前最流行的持久层框架,专注于数据库操作.使用Hibernate框架能够使开发人员从繁琐的SQL语句和复杂的JDBC中解脱出来.Hibernate ...
- Atitit.hibernate体系结构大总结
Atitit.hibernate体系结构大总结 1. 4.1 hibernate基础语义 80 4.1.1 configuration 80 4.1.2 sessionfactory 81 4. ...
随机推荐
- Co. - Microsoft - Windows - Dos命令
DOS命令 cd .. 是进入上一层目录,cd \ 是进入根目录 我们来重申下%~dp0和%cd%的区别, %cd%和%~dp0都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同: %cd ...
- SSM框架理解搭建(虽然是网上拼的,但是实际按照搭建是可以的)——
SpringSpring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象.Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地 ...
- ECSHOP和SHOPEX快递单号查询百世快递插件V8.6专版
发布ECSHOP说明: ECSHOP快递物流单号查询插件特色 本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅 ...
- PHP json_decode返回null解析失败原因
在PHP5.4之前 json_decode函数有两个参数json_decode有两个参数,第一个是待解析的字符串,第二个是是否解析为Array json_decode要求的字符串比较严格:(1)使用U ...
- C语言实例解析精粹学习笔记——32
实例32: 编制一个包含姓名.地址.邮编和电话的通讯录输入和输出函数. 思路解析: 1.用结构体来完成姓名.地址.邮编和电话的组合. 2.结构体指针的使用. 3.malloc的使用 4.scanf函数 ...
- 1.使用pycharm搭建开发调试环境【转】
感谢 feigamesnb 第一步:安装python2.7环境 去https://www.python.org/downloads/下载windows版本的python,选择2.7版本,按提示安装,并 ...
- elasticsearch 关联查询
父-子关系文档 父-子关系文档 在实质上类似于 nested model :允许将一个对象实体和另外一个对象实体关联起来. 而这两种类型的主要区别是:在 nested objects 文档中,所有对象 ...
- axios应用
Skip to content Features Business Explore Marketplace Pricing Sign in or Sign up Watch929 St ...
- golang select 退出结束goroutine
开启了多个协程 其中一个协程满足条件后终止select, 原以为其他的协程会在后台系统中继续悄悄运行 直到主进程关闭而关闭 . 做一实验发现select 监听退出 会关闭所有监听的goroutine ...
- 【廖雪峰老师python教程】——OOP
概述 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 数据封装.继承和多态 ...