最近在原有的基础上又一次的学习了下hibernate。师父说过,学习要记得写笔记。所以今天来做一次关于hibernate的笔记:
希望对初学者有所帮助,大家相互学习,相互进步。
1.SessionFactory
是针对单个数据操作编译后的内存镜像,他是一个线程安全的,不可变的。
2.session
作为应用程序与持久层操作的一个单线程对象。所有的操作对已hibernate来说都必须同session对象去进行操作。
3.hibernate三种状态
transient 瞬时状态:实体对象自由状态,既没有和数据库有任何联系时。
persistent 持久状态:此时实体对象被纳入hibernate管理。
detached 脱离状态:由persistent转变成detached状态,此时session关闭后。与上下午无任何联系。
4 hibernate映射关联
多对一(many to one)
用户--用户组
<many-to-one name="group" column="groupid" cascade="all"></many-to-one>
会在多的一段加入一个外键,这个外键有column设定。 如果忽略这个属性 外键与实体属性一致
级联是:是对象的连锁操作
一对一(one to one)
分两种状态,单项与双向主键外键。首先我们先来看单项:
一对一主键关联映射(单向关联Person---->IdCard)
让两个实体对象的id保持相同,这样可以避免多余的字段被创建
这里要关注的是如果是one2one 单项我们的主键生成策略需要发生变化:
<id name="id">
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<one-to-one name="idCard" constrained="true"/>
此时主键上存在一个约束,默认person的主键作为外键参照了idCard 我们可以通过建立表后看到 在person表中加了一个index 外键是card表的id。
一对一主键关联映射(双向关联Person<---->IdCard)
在IdCard的一段加入一个 <one-to-one>标签指向person,
<one-to-one name="person" ></one-to-one>
hibernate一对一唯一外键关联映射(单向关联Person---->IdCard)
一对唯一外键关联映射是多对一关联映射的特例
可以采用<many-to-one>标签,指定多的一端的unique=true,这样就限制了多的一端的多重性为一
通过这种手段映射一对一唯一外键关联
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="idCard" unique="true"></many-to-one>
而在一的一方需要通过一个
<one-to-one name="person" property-ref="idCard" ></one-to-one>
而需要设置 的是 property-ref 的引用 去指定到跟哪个字段关联。
hihernate一对多关联映射(单向Classes----->Student)
一对多单项中 我们需要在一的一段去为多的一段映射一个 一端的外键。
而在一的一段通过set 集合去映射即可。
<set name="students">
<key column="classesid" not-null="true"/>
<one-to-many class="com.viken.Hibernate.Student"/>
</set>
当通过单项的时候,一旦一的一方 外键含有NULL 则无法进行更新,也就是在每一次 都需要发出一个update语句进行更新,一旦有NULL 就无法更新,所以我们需要通过双向方式进行 ONE2MANY的映射。
<set name="students" inverse="true" cascade="all">
<key column="classesid"/>
<one-to-many class="com.viken.Hibernate.Student"/>
</set>
<many-to-one name="classes" column="classesid"/>
再次我们需要 住的是一个inverse 属性进行反转使得 一的一方失效。通过多的一方维持关系
一对多关联映射利用了多对一关联映射原理
多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一
一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多
也就是说一对多和多对一的映射策略是一样的,只是站的角度不同
在一一端维护关系的缺点:
* 如果将t_student表里的classesid字段设置为非空,则无法保存
* 因为不是在student这一端维护关系,所以student不知道是哪个班的,
所以需要发出多余的update语句来更新关系
hihernate一对多关联映射(双向Classes<----->Student)
一对多双向关联映射:
* 在一一端的集合上使用<key>,在对方表中加入一个外键指向一一端
* 在多一端采用<many-to-one>
注意:<key>标签指定的外键字段必须和<many-to-one>指定的外键字段一致,否则引用字段的错误
如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多
的一端来维护关联关系
关于inverse属性:
inverse主要用在一对多和多对多双向关联上,inverse可以被设置到集合标签<set>上,
默认inverse为false,所以我们可以从”一“一端和”多“一端维护关联关系,
如果设置成inverse为true,则我们只能从多一端来维护关联关系
注意:inverse属性,只影响数据的存储,也就是持久化
inverse和cascade
* inverse是关联关系的控制方向
* cascade操作上的连锁反应
分享到:
相关推荐
**Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它为 Java 开发者提供了一种在 Java 应用程序中管理关系...通过实践和深入学习,你可以更好地利用 Hibernate 实现高效、可靠的数据库应用。
**Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...
### J2EE系统之-hibernate学习总结 #### 对象持久化理论 - **对象持久化定义**:将对象中的数据转换存储至外部持久性存储设备的过程,如数据库、磁盘等。 - **对象持久化的原因**: - 内存易失性:断电后数据丢失...
**hibernate学习总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。在Java世界中,Hibernate 提供了一种在对象模型和关系数据库之间进行转换的机制,使得开发...
1. Hibernate产生的原因:Hibernate的出现主要是为了解决JDBC编程中的一些问题,如代码和SQL混杂,不利于维护;SQL语句使得程序失去面向对象的特性;数据模型变化需要手动修改大量SQL;以及SQL错误在编译时无法检查...
**Hibernate学习笔记与大纲** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本笔记将深入...
【Struts+Spring+Hibernate 学习总结】 SSH(Struts、Spring、Hibernate)是Java Web开发中的一个经典企业级应用架构,它将MVC设计模式应用到Web应用的各个层次,实现了良好的分层和解耦。这篇学习总结旨在帮助读者...
### Hibernate学习总结与知识点详解 #### 一、Hibernate产生的背景及优势 Hibernate作为一个持久层框架,它的诞生解决了传统编程模式中业务逻辑与数据库访问代码混杂的问题,这不仅导致程序结构混乱,降低代码的...
《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...
Hibernate是Java开发中的一款强大的对象关系映射(ORM)框架,它为开发者提供了一种在Java应用程序中操作数据库的面向对象方式,极大地简化了数据库操作的复杂性。通过使用Hibernate,开发者可以避免直接编写SQL语句...
这些资料构成了一套完整的Hibernate学习路径,从基础到高级,从配置到实践,对于理解Hibernate的核心机制和提升开发技能都非常有帮助。通过阅读和研究这些内容,开发者可以更熟练地运用Hibernate进行数据库操作,...
【北大青鸟Hibernate学习资料】 Hibernate是一个开源的Java ORM(对象关系映射)框架,它为开发者提供了在Java应用中管理关系数据库数据的便捷方式。本学习资料集合了多个关于Hibernate的重要主题,包括对象关系...
**Hibernate核心知识点详解** Hibernate是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以...阅读提供的"Hibernate.pdf"文档将进一步深入理解这些概念,并提供实际示例帮助学习。
HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发人员以面向对象的方式编写查询,而不是直接使用SQL。这使得查询更加符合Java开发人员的思维习惯,同时也更容易理解和维护。 例如,如果有一个...