Hibernate初步

Hibernate 中对象有三种状态 Transient(瞬时), Persistent(持久)和 Detached(托管)状态。

在持久层的对象称为 PO (Persistent Object),瞬时对象和托管对象称为VO(Value Object)

瞬时状态: 

new一个对象,如果没有变量对其进行引用,它将被JVM回收;瞬时对象在内存中是孤立存在的,它的意义仅是携带信息的载体,和数据库没有任何关联。通过Session的save()和saveOrUpdate()方法可以把这个瞬时对象与数据库相关联,并把瞬时对象带的信息通过配置文件所做的映射插入到数据库中,这个瞬时对象就变成了持久化对象,并拥有和数据库记录相同的id标识(Hibernate自动将id值赋予它)。

持久化状态:

持久(Persistent)的实例在数据库中有所对应的记录,并拥有持久化标志(identifier)。直接进行数据库查询所返回的对象,如find(),get()和iterater()等方法查询到的数据对象,这些对象会马上变为持久对象。若一个对象被持久对象引用,也会变为持久对象。

用delete()方法,变回瞬时状态。

持久对象总是与Session,Transaction相关联。在Session中,对持久对象的改变不会马上对数据库进行更改,而必须在Transaction终止,也就是执行完commit()后,持久对象的状态才会与数据库进行同步,在同步之前的持久对象称为脏(dirty)对象。

当一个Session执行close()或clear(),evict()后,持久对象会变为托管对象。此时对象的id虽然拥有数据库识别值,但它并不在Hibernate持久层的管理之下,它与瞬时状态本质是相同的,只不过多了数据标识的id值,没有任何变量引用到托管对象时,JVM会适时回收。

托干状态:

与持久对象关联的Session关闭后,对象就变为托管的;托管对象如果重新关联到某个Session上,会再次转变为持久的。通常的应用:从数据库查询到一笔数据,关闭Session将联机资源让出,此时对象为托管状态,使用者经过一段时间操作托管对象(例如购物车),然后重新开启Session,托管对象与Session重新关联,将变更结果存回数据库。


Hibernate的数据检索策略

立即检索:配置文件的标识符:lazy=“false”

Hibernate在从数据库中取得字段值组装好一个对象后(eg:学生1),会立即再从数据库取数据组装成此对象所关联的班级(eg:班级1),如果这个关联对象还 有关联对象(eg:学生2),再组装此关联对象。

一对一关联和多对一关联适合立即检索

延迟检索:配置文件的标识符:lazy=“true(默认都为true)

等到需要用到时,才会去取被关联的对象。”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值