在Hibernate中,持久化对象再被操作过程中分为三个时期.这三个时期和session周期相关.

各自是瞬时(Transient),持久太(persistent)和游离态(Detached)

瞬时状态

由new命令开辟内存的java对象.比如:Student
stu= newStudent();若没有变量对他引用,则被jvm回收.瞬时对象在内存中孤立存在,他的意义仅是携带信息的载体,不和数据库中的数据有不论什么的关联。通过session的save()和saveOrUpdate()方法能够把一个瞬时对象与数据库相关联,并把瞬时对象携带的信息通过配置文件所做的映射插入到数据库中,这个瞬时对象就成了持久化对象,拥有和数据库记录同样的id标示(Hibernate自己主动将id赋予它)

瞬时特点:

(1)不和Session实例关联

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

持久态

持久的实例在数据库中有相应的记录.是Session和Transction相关联.在sessin中,持久对象改变不会立即对数据变更.而必须在Transcation终止,commit后,才与数据库进行同步.在此之前的持久太对象为脏对象.

使用 find,get ,load和iterater等方法查询的数据,都是持久对象.若一个瞬时对象被持久对象引用,则该对象也会变为持久对象.

假设使用delete()方法,它就会变为瞬时对象;当一个Session运行close()或clear()、evict()之后,持久对象就会变为托管对象。

持久特点:

(1)和Session实例关联

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

	代码演示样例:
public void testSave()
{
Session session =null;
Transaction tx=null ;
try{
session= HibernateUtils.getSesion();
tx =session.beginTransaction(); //transient 瞬时状态
User user= new User();
user.setName("sdf");
user.setPassword("hanhan23");
user.setCreateTime(new Date());
//persistent, ,session引用,po持久
session.save(user); //被引用,成为持久状态//可是为脏对象
user.setName("lisd");
tx.commit();//
}catch(Exception e){
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
//deteached状态关闭sesion后
}

以上演示样例演示瞬时态转为持久态对象

托管状态

与持久对象关联的Session被关闭后,对象变为托管。对托管对象的引用依旧有效,对象可继续被修改。托管对象假设又一次关联到某个新的Session上,会再次转变为持久的。托管状态期间的修改将会被持久化到数据库。

托管状态拥有数据库标识id,所以它能够通过update()、saveOrUpdate()和lock()等方法,再度与持久层关联。

托管特点:

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

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

小结:

通过以上三种的对照,认识到,Hibernate中的对象是在session的管理进行数据的持久更新.状态之间的转换是与对象的生命周期息息相关.刚创建的内存中为游离态,若一旦被session保存为持久态(或被session引用).一旦sesion关闭或delete变为托管.学习之初,还请多多提意见.

Hibernate持久化对象状态的更多相关文章

  1. 1.1Hibernate持久化类和Hibernate持久化对象状态

    一.持久化对象po类 1.po定义 PO,是Persistent Object的缩写,是持久化类.PO是由PO=POJO+hbm映射配置组成. 2.通俗理解 PO类即持久化类,其实就是一个普通的Jav ...

  2. Hibernate持久化对象修改id重新保存的办法

    Hibernate持久化对象修改id重新保存的办法——Hibernate学习记录二 2017年11月10日 20:16:48 筱光 阅读数:1122   版权声明:本文为博主原创文章,未经博主允许不得 ...

  3. hibernate 持久化对象 save

    hibernate 持久化对象 save new出来的user对象是游离状态的对象,执行session.save()方法保存后,user对象就变为持久化了,持久化的对象跟数据库表双向绑定的意思, 对象 ...

  4. Hibernate持久化对象

    持久化类应遵循的规则: 有无参构造器,构造器的修饰符>=默认访问控制符 有标识属性,映射数据库表的主键,建议使用基本类型的包装类 每个成员有setter和getter 非final修饰的类 重写 ...

  5. 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化

    准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...

  6. Hibernate持久化对象的三种状态深入理解

    关于OID hibernate缓存是一个map,他会根据OID作为缓存对象的key,我们的映射文件中<id>标签指定的属性值会作为OID 持久化对象的三种状态 为了方便理解,Hiberna ...

  7. hibernate 持久化对象的三个状态

    Hibernate中的对象有3种状态 瞬时对象(TransientObjects).持久化对象(PersistentObjects)和离线对象(DetachedObjects也叫做脱管对象) Tran ...

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

    在上一篇博文中,小编主要简单的介绍了[SSH系列]--hibernate基本原理&&入门demo,今天小编来继续介绍hibernate的相关知识, 大家知道,Java对象的生命周期,是 ...

  9. Hibernate持久化对象的状态

    1. 站在持久化的角度 , Hibernate 把对象分为 4 种状态 : 持久化状态, 暂时状态, 游离状态(脱管状态) , 删除状态.Session 的特定方法能使对象从一个状态转换到还有一个状态 ...

随机推荐

  1. iOS转场动画

    文顶顶 最怕你一生碌碌无为 还安慰自己平凡可贵 iOS开发UI篇—核心动画(转场动画和组动画) iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的子类,用于 ...

  2. 使用ActionBar实现Tab导航(快速生成Tab样式)

    效果如图: MainActivity.java具体实现: package com.rainmer.actionbartab; import android.app.ActionBar; import ...

  3. IAR之工程配置

    参考 : IAR的Workspace顶部下拉菜单中Debug和Release http://blog.csdn.net/yanpingsz/article/details/5588525 ++++++ ...

  4. linux常用命令系列—cp 复制文件与文件夹

    原文地址:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=2272&id=37363 指令名称:cp(copy)功能介绍 ...

  5. jquery的slideUp、slideDown、slideToggle等涉及滑动效果的一系列函数,在IE浏览器下有几处bug

    jquery的slideUp.slideDown.slideToggle等涉及滑动效果的一系列函数,在IE浏览器下有几处bug: 1. 因position引起的问题 影响:IE全系列 症状:在需要sl ...

  6. HDU 3974 Assign the task 简单搜索

    根据Rex 的思路才知道可以这么写. 题目意思还是很好理解的,就是找到当前雇员最近的任务. 做法是,可以开辟一个 tim 变量,每次有雇员得到昕任务时候 ++tim 然后取寻找最近的任务的时候写一个搜 ...

  7. POJ 1830 【高斯消元第一题】

    首先...使用abs()等数学函数的时候,浮点数用#include<cmath>,其它用#include<cstdlib>. 概念: [矩阵的秩] 在线性代数中,一个矩阵A的列 ...

  8. DFS 练习 (这篇真的是随笔)

    目的: 输入: 3 输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 代码如下: #include<stdio.h> ],b[],n; void dfs(in ...

  9. 2014Esri全球用户大会之标准和互操作

    1.   ArcGIS是一个开放协作的平台吗?Esri是怎样看待"开放"的? 是的,ArcGIS是一个开放协作的平台.Esri公司致力于支持我们的用户更加easy的在异构环境下工作 ...

  10. 【剑指Offer学习】【面试题17 ::合并两个排序的链表】

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是依照递增排序的 链表结点定义例如以下: public static class ListNode { int value; List ...