Hibernate从入门到放弃(三)----持久化对象

对象的三种状态



    对于Hibernate而言,对象状态分为三种:

瞬时态

    当对象刚创建,和Session没有发生任何关系时,当程序运行完成就立刻消失,被称为瞬时态。瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识,如果程序中失去了瞬态对象的引用,瞬态对象将被垃圾回收机制销毁。使用Hibernate Session可以将其变成持久化状态。具体的转化方法如下:

Serializable save(Object obj):将obj对象变为持久化状态,该对象的属性将被保存到数据库。
void persist(Object obj):将object对象转化为持久化状态,该对象的属性将被保存到数据库中。
Serializable save(Object obj,Ojbect pk):将obj对象保存到数据库,保存到数据库时,指定主键值。
void persist(Object obj,Object pk):将obj对象转化为持久化状态,该对象保存到数据库,指定主键值。

持久态

    当执行如下代码是,对象变为持久态

Emp e = new Emp();
session.save();

    持久态的对象和Session发生了关系,如执行了save、get、query等方法

  • Session中会缓存该对象(Session的缓存叫一级缓存)
  • Session在获取对象是,首先去查找一级缓存,如果没有才查询数据库。
  • Session要负责将持久态对象的变化更新到数据库。(在是flush()的时候更新,tx在提交的时候会自动调用session的flush())。

游离态

    Session关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,他们不再受Hibernate管理。
    游离对象的特征。游离对象具有以下特征:

1、不再位于Session的缓存中,也可以说,游离对象不被Session关联。

2、游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)。

    游离对象与临时对象的相同之处在于,两者都不被Session关联,因此Hibernate不会保证它们的属性变化与数据库保持同步。游离对象与临时对象的区别在于:前者是由持久化对象转变过来的,因此可能在数据库中还存在对应的记录,而后者在数据库中没有对应的记录。
    Session的以下方法使持久化对象转变为游离对象:

1、当调用Session的close()方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期。

2、Session的evict()方法能够从缓存中删除一个持久化对象,使它变为游离状态。当Session的缓存中保存了大量的持久化对象,会消耗许多内存空间,为了提高性能,可以考虑调用evict()方法,从缓存中删除一些持久化对象。但是多数情况下不推荐使用evict()方法,而应该通过查询语言,或者显式的导航来控制对象图的深度。

时间: 2024-08-03 07:46:37

Hibernate从入门到放弃(三)----持久化对象的相关文章

Hibernate从入门到放弃(一)----初识ORM

    Hibernate是轻量级的Java EE应用的持久层的解决方案,Hibernate不仅管理Java类到数据库表的映射(包括Java数据类型到SQL数据类型的映射),还提供数据查询和数据获取的方法,可以大幅度缩短使用JDBC处理数据持久化的时间. ORM和Hibernate     在介绍Hibernate之前咱们得先了解了解ORM     对象/关系数据库映射(ORM)     当我们使用一种面向对象的程序设计语言来开发项目的时候,从开始就开始使用面向对象分析.面向对象设计.面向对象编

Hibernate从入门到放弃(二)----和这个世界打声招呼(HelloWorld)

核心步骤 导入Jar包 Hibernate配置文件(只有一个)     hibernate.cfg.xml用于数据库连接信息Hibernate的一些配置信息 Hibernate映射文件(可以有n个)     用来致命类和表之间的对应关系,Hibernate根据该文件生成SQL语句,比如POJO类名为User.java,对应的映射文件就名为User.hbm.xml. 案例--Hibernate HelloWorld 1).项目的结构图 2).新建项目hw_hibernate 3).导入Jar包  

【SSH系列】-- Hibernate持久化对象的三种状态

       在上一篇博文中,小编主要简单的介绍了[SSH系列]--hibernate基本原理&&入门demo,今天小编来继续介绍hibernate的相关知识, 大家知道,Java对象的生命周期,是从通过new语句创建开始,到不再被任何引用变量引用结束,结束后它占用的内存将被JVM垃圾回收机制收回.在hibernate中持久化类的对象可以划分为三种状态,分别是瞬态,持久态,脱管态.       一.瞬态(Transient),也叫临时态.处于这种状态的对象具备的特征如下:       a.

hibernate持久化对象的三个状态

              Hibernate中的对象有3种状态,瞬时对象(TransientObjects).持久化对象(PersistentObjects)和离线对象(DetachedObjects也叫做脱管对象).这三个状态的主要区别在两方面:1.session;2.数据库                          下面说一下不同状态的特征:            1.Transient (瞬态)              a) 不在Session的缓存中,不与任何的Session

Hibernate框架学习之二:深入理解持久化对象

前言 由于Hibernate框架是一个完全的ORM框架,所以在Hibernate开发中只涉及具体的对象与属性,所以对象在Hibernate中是很重要的方面.而持久化对象则与数据库中的记录息息相关了,可以简单把持久化类理解为普通的JavaBean,也被称为POJO(Plain Old Java Object),在Hibernate3中,持久化类的定义与普通JavaBean的定义基本一致,而不需要额外实现其他接口或者继承某个类. 但是使用要想是一个普通的POJO与数据库对应起来还需要映射的配置(这点

第四章 Hibernate中的持久化对象的生命周期

4.1提供对象状态管理的目的      使开发者不再需要理会底层数据库系统的细节      使用Hibernate的开发者应该总是关注对象的状态(state),不必考虑SQL语句的执行 4.2 Hibernate 仅仅定义了三种状态:瞬时(临时).持久和脱管(游离),对客户端代码隐藏了其内部实现的复杂性 4.2.1 瞬时对象(Transient Object):Hibernate中的持久化对象的生命周期         使用new操作符初始化的对象不是立刻就持久的.它们的状态是瞬时的,也就是说它

Hibernate从入门到精通(三)Hibernate配置文件

在上次的博文Hibernate从入门到精通(二)Hibernate实例演示我们已经通过一个实例的演示对Hibernate 的基本使用有了一个简单的认识,这里我们在此简单回顾一下Hibernate框架的使用步骤. Hibernate 框架的使用步骤: 1.创建Hibernate的配置文件 2.创建持久化类,即其实例需要保存到数据库中 的类 3.创建对象-关系映射文件 4.通过Hibernate API编写访问数据库的代码 Hibernate配 置文件 本此博文,我们重点讲解一下Hibernate的

Eclipse快速上手Hibernate之入门实例

这篇文章主要谈谈Hibernate的入门开发,例子很简单,就是向数据表中添加用户名和密码.我分别使用了三种方法,一种是直接写代码,写Hbm映射文件等:一种是通过Hbm映射文件来生成代码:一种是通过代码来生成Hbm映射文件.使用了一些自动化工具,XMLBuddy是用来编辑XML文件的,JBoss Eclipse IDE是用来编写Doclet标记的.这篇文章还谈到了一些Eclipse的使用技巧,比如建立"用户库"."生成 Getter 和 Setter"等. 关于一些软

Hibernate从入门到精通(四)基本映射

映射的概念 在上次的博文Hibernate从入门到精通(三)Hibernate配置文件我们已经讲解了一下 Hibernate中的两种配置文件,其中提到了两种配置文件的主要区别就是XML可以配置映射.这里提到的映射即 对象关系映射(Object Relational Mapping).ORM的实现目的就是将对象数据保存到数据库中,同时可以将数 据库数据读入对象中,这样开发人员就可以将对数据库数据的操作转化为对这些对象的操作. 基本映 射 了解了映射的意义和概念之后,我们来讲解一下映射的分类.从映射