`

Hibernate学习之持久化对象

阅读更多

Hibernate对其持久化对象实现了缓存管理,来提高系统性能,Hibernate支持两级缓存管理,一级缓存 是由Session提供的,因此它只存在于Session的生命周期中,是Session所内置的,不能被卸载。
Hibernate的二级缓存是由SessionFactory提供的,他作为一个可插入的组件使用的,默认是不支持的,应用必须明确配置二级缓存才能使用.
Session缓存的作用:
降低数据库的访问频率
保证缓存中的对象与数据库中的相关记录保持同步

持久化对象的状态:
临时状态(Transient)    刚刚用new创建,还没有被持久化,还不处于Session缓存之中
持久化状态(Persistent)    已经被持久化,加入到Session的缓存之中
游离状态(Detached)    已经被持久化,但不再处于Session的缓存之中

判断一个对象处于怎样的状态 :

主要的依据是 : 1. 看该对象是否处于 session管理 ;2. 看在数据库中有没有对应的记录

瞬时态 : 没有 session 管理 , 同时数据库没有对应记录

持久态 : session 管理,同时在数据库中有记录

脱管态 / 游离态: 没有 session 管理,但是在数据库中有记录 .


临时对象 的特征:
不处于Session的缓存中
在数据库中没有对应的记录
以下情况会使对象进入临时状态:
当通过new语句刚创建了一个对象
Session的delete()方法会使一个对象从持久化状态或游离状态进入临时状态
持久化对象 的特征:
位于一个Session实例的缓存中
持久化对象和数据库中相关的记录对应
Session在清理缓存时,会根据持久化对象的属性的变化来同步更新数据库
Session的save()方法把临时对象变为持久化对象
Session的update(), saveOrUpdate(),lock()使对象从游离状态变成持久化状态。
Session的load()或get()方法返回的是持久化对象,find()方法返回的List元素
游离对象 的特征:
不再处于Session的缓存中
游离对象是从持久化对象转变过来的
调用Session的close()方法时,Session的缓存被清空,缓存中的持久化对象会变成游离对象
Session的evict()能从缓存中删除一个对象,使之从持久化状态变成游离状态

save()//保存对象
把临时对象加入到缓存中,使之成为持久化对象
使用指定的ID生成器为持久化对象分配OID
当对象处于持久化状态,Hibernate不允许修改其OID
update()//修改对象
把游离对象加入到缓存中,使一个游离对象变成持久化对象
计划执行update SQL语句,根据对象的OID来更新对象所对象的数据
update()不能更新一个在session中已经关联的相同OID的对象
saveOrUpdate()//保存或修改对象
同时包含了save()和update()方法的功能,根据对象的状态自动执行相应的功能
若对象为临时状态,执行save()方法,若为游离状态则执行update()方法
merge()    //合并对象
直接修改表中的记录,并不影响该对象原来的状态
contains()    //判断实体对象是否与Sesison关联
可以用此方法判断对象是否处于持久化状态
evict()     //把实体对象从Session缓存中移除
clear()     //清除Session缓存中所有的持久化对象
delete()    //删除指定的对象
配置级联删除
1. 设置cascade为“delete” 或 “all” 或 “save-update,delete”。 “all”与“save-update,delete”相同
学生和地址之间存在一对一的关系,如果希望删除学生信息时,同时删除地址信息,可以在学生这一头这样配置。
2.设置cascade=“delete-orphan”
班级和学生是一对多的关系,在班级的set元素中进行配置。更新班级对象时,检查set集合中缺少的学生对象,删除数据库中对应的学生记录。
get()
load()

两个方法的区别:

Books book=(Books) session.load(Books.class, 2);
都是根据指定的OID从数据库中加载一个持久化状态对象
当数据库中不存在与OID相对应的记录时,get()返回一个null引用,而load()方法会抛出ObjectNotFoundException异常
使用get 去查询数据,(先到一级/二级)会立即向db发出查询请求(select ...), 如果你使用的是 load查询数据,(先到一级、二级))即使查询到对象,返回的是一个代理对象,如果后面没有使用查询结果,它不会真的向数据库发select ,当程序员使用查询结果的时候才真的发出select ,这个现象我们称为懒加载(lazy)

通过修改配置文件,我们可以取消懒加载
<class  name="Employee" lazy="false" table="employee">
如何选择使用哪个: 如果你确定DB中有这个对象就用load(),不确定就用get()(这样效率高)

  • 大小: 38.9 KB
分享到:
评论

相关推荐

    精通 Hibernate:Java 对象持久化技术详解 第2版

    精通 Hibernate:Java 对象持久化技术详解 第2版 学习Hibernate必备得一本书

    精通Hibernate:java对象持久化技术

    该ppt是根据孙老师的精通Hibernate一书学习总结的,使用hibernate3.x版本,提及部分与2.x中的不同之处(难免有不足之处,望大家指正)

    Hibernate 对象持久化

    对象持久化基础知识 Hibernate应用开发基础 Hibernate对象关系映射 对象的状态 Hibernate的检索策略 Hibernate检索数据的方式 数据库事务与并发处理 组件及组成关系映射 综合项目应用:Struts+Hibernater

    精通HibernateJava对象持久化技术

    HibernateJava持久化技术的详细学习资料!

    精通Hibernate:对象持久化技术第二版part1

    国内MM写得难得的好书,对学习hibernate很有帮助

    深入学习Hibernate持久化对象的三个状态

    Hibernate中的对象有3中状态,瞬时对象(TransientObjects)、持久化对象(PersistentObjects)和离线对象(DetachedObjects也叫做脱管对象),下面通过本文给大家分享Hibernate持久化对象的三个状态,一起看看吧

    基于Hibernate的Java对象持久化技术分析--农户征信管理平台的设计

    基于Hibernate的Java对象持久化技术分析--农户征信管理平台的设计,包括论文,开题报告,文献综述,英文翻译,任务书,还有演讲的PPT,可作为毕业答辩用。。。本人建议还是好好学习一下。。

    一套不错的hibernate学习教程

    Hibernate是一个优秀的持久化框架 什么是持久化? Hiberante应用程序的结构 JDBC与Hibernate的比较 第二章 Hibernate API 目标: Hibernate API简介 在java应用hibernate步骤 Hibernate 配置文件 持久化类 创建对象-...

    Hibernate3 学习笔记.ppt

    Hibernate3 学习笔记.ppt 一、O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) ...五、持久化对象的状态和生命周期 六、Hibernate查询 七、Hibernate最佳实践 八、Hibernate Tool

    J2EE系统之-hibernate学习总结

    对象持久化理论: 什么是对象持久化:把对象里面的数据转存到外部的持久存储设备中(如数据库、磁盘等) 为什么要对象持久化: 1、内存断电后,数据就会消失 2、需要共享数据 3、内存空间有限 4、使数据...

    精通 Hibernate:Java 对象持久化技术详解(第2版

    Hibernate经典,学习Javaweb开发必备

    孙卫琴 精通Hibernate.pdf

    学习hibernate不错的资源文件,讲的挺好的

    Hibernate4学习基础教程(26集)

    内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射、检索策略、检索方式、Hibernate 一\二级缓存、管理 Session、批量处理等 Hibernate 企业级开发的核心技术。

    Hibernate学习文档

    使用 Hibernate 进行数据持久化操作,通常有如下步骤: 编写持久化类: POJO + 映射文件 获取 Configuration 对象 获取 SessionFactory 对象 获取 Session,打开事务 用面向对象的方式操作数据库 关闭事务,关闭 ...

    精通hibernate3.0(第三版).rar

    精通hibernate3.0(第三版),详解了对象持久化技术;有经典实例供学者学习;值得研读一番。

    Hibernate中文学习文档.chm

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任。

    Hibernate学习资料下载

    Hibernate是一个开放源代码的对象关系映射框架,它对... ,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任

    Hibernate中文详细学习文档

    10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 ...

    NHibernate参考文档 - 符合.Net习惯的关系数据库持久化

    NHibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,NHibernate可能不是最好的解决方案;对于那些在基于.NET...

    Hibernate笔记 马士兵

    十一、 不需要(持久化)psersistence的字段 18 十二、 映射日期与时间类型,指定时间精度 18 十三、 映射枚举类型 19 第12课 使用hibernate工具类将对象模型生成关系模型 19 第13课 ID主键生成策略 20 一、 Xml方式 ...

Global site tag (gtag.js) - Google Analytics