`

hibernate学习笔记第3讲—持久化对象的生命周期—load和get的区别

阅读更多




 
 1.瞬时状态(Transient)

new命令开辟内存空间的Java对象,也就是平时所熟悉的普通Java对象。

如:Student stu = new Student();

瞬时对象特点:

(1)不和Session实例关联

(2)在数据库中没有和瞬时对象关联的记录

2 持久状态(Persistent)

持久的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier).

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

瞬时对象转为持久对象:

(1) 通过Sessionsave()saveOrUpdate()方法把一个瞬时对象与数据库相关联,这个瞬时对象就成为持久化对象。

(2) 使用fine(),get(),load()iterater()待方法查询到的数据对象,将成为持久化对象。

持久化对象的特点:

(1) Session实例关联

(2) 在数据库中有和持久对象关联的记录

3 脱管状态(Detached)

与持久对象关联的Session被关闭后,对象就变为脱管对象。对脱管对象的引用依然有效,对象可继续被修改。

脱管对象特点:

(1) 本质上和瞬时对象相同

(2) 只是比爱瞬时对象多了一个数据库记录标识值id.

持久对象转为脱管对象:

当执行close()clear(),evict()之后,持久对象会变为脱管对象。

瞬时对象转为持久对象:

通过Sessionupdate(),saveOrUpdate()lock()等方法,把脱管对象变为持久对象。

 

Transient :数据库没有与之对应的对象。没有纳入session管理。

Persistent:在session缓存中。在数据库中有与之对应的记录。

Detached:只是从session中清掉了,数据库中有与之对应的记录。没有纳入session管理

 

Load get的区别:

Get不支持lazyload支持lazy

//马上发出查询sql,加载User对象

//采用get加载数据,如果数据库中不存在相应的数据,返回null

User user = (User)session.get(User.class, "402880d01b9bf210011b9bf2a2ff0001");

 

//不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)

//延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)

//hibernate延迟加载实现原理是代理方式

//采用load加载数据,如果数据库中没有相应的数据

//那么抛出ObjectNotFoundException

User user = (User)session.load(User.class, "402880d01b9bf210011b9bf2a2ff0001");

  • 大小: 76.4 KB
  • 大小: 25.2 KB
0
0
分享到:
评论

相关推荐

    hibernate学习笔记

    在 Hibernate 中,对象有三种状态:瞬时对象(Transient Object)、持久对象(Persist Object)和离线对象(Detached Object)。瞬时对象未被 Session 管理,且在数据库中无对应记录。持久对象在数据库中有记录,并...

    Hibernate 学习笔记&代码.zip

    本学习笔记和代码资源是基于黑马程序员在 B 站上的《Hibernate框架》课程,该课程深入浅出地讲解了 Hibernate 的核心概念和实际应用。 **第一天:Hibernate 概述与环境搭建** 1. **Hibernate 概念**:Hibernate 是...

    Hibernate3.3_学习笔记.doc.zip

    《Hibernate3.3_学习笔记》是一份详细记录了Hibernate3.3版本特性和使用方法的文档,旨在帮助开发者深入理解和应用这一强大的对象关系映射(ORM)框架。Hibernate是Java开发中的一个明星库,它简化了数据库操作,...

    Hibernate 的学习笔记

    ### Hibernate 学习笔记知识点详解 #### 一、Hibernate 简介 - **概念**:Hibernate 是一种“对象/关系映射”(Object/Relational Mapping,简称 ORM)技术,用于解决 Java 应用程序与关系型数据库交互的问题。 - *...

    韩顺平hibernate笔记

    韩顺平老师的hibernate笔记,是针对他视频教程的配套学习资料,旨在帮助学习者深入理解和应用Hibernate。 一、Hibernate简介 Hibernate是Java领域内广泛使用的ORM框架,它允许开发人员在Java对象和关系数据库之间...

    Hibernate培训笔记.

    Hibernate提供了一种在Java应用程序中持久化对象的方式,通过映射数据库表到Java类,使得开发者可以使用面向对象的方式来操作数据库,降低了SQL编程的复杂性。其核心组件包括Configuration、SessionFactory、Session...

    hibernate培训第三天

    在hibernate中,对象的生命周期包括瞬态、持久化、托管和脱管四个状态。通过Session对象,我们可以进行持久化操作,如保存(save())、更新(update())、删除(delete())和加载(get()、load())实体。此外,还有...

    黑马程序员 hibernate 2016版讲义和笔记(4天全)

    Hibernate,作为Java领域中的一个著名持久化框架,为开发者提供了强大的对象关系映射(ORM)功能,极大地简化了数据库操作。本资料集是黑马程序员2016年推出的Hibernate专题课程的讲义和笔记,涵盖了4天的全面学习...

    Hibernate资料

    3. **Session(会话)**: Session 是 Hibernate 中的主要接口,用于在应用和持久化存储之间提供事务性的边界。它是临时性的,负责管理对象的状态并执行数据库操作。 4. **SessionFactory(会话工厂)**: ...

    hibernate笔记

    3. **会话(Session)**: Hibernate 会话是应用程序与数据库之间交互的桥梁,负责对象的持久化操作。它维护了对象和数据库记录之间的状态,确保了事务的一致性。 4. **配置(Configuration)**: Hibernate 配置文件...

Global site tag (gtag.js) - Google Analytics