Hibernate的持久化类状态
  持久化类:就是一个实体类 与 数据库表建立了映射.
  Hibernate为了方便管理持久化类,将持久化类分成了三种状态.
    瞬时态 transient (临时态):持久化对象没有唯一标识OID.没有纳入Session的管理
    持久态 persistent :持久化对象有唯一标识OID.已经纳入到Session的管理(持久化持久态对象有自动更新数据库的能力)
    脱管态 detached (离线态):持久化对象有唯一标识OID,没有纳入到Session管理

区分三种持久化对象的状态

@Test
// 区分持久化对象的三种状态:
public void demo1(){
  // 1.创建Session
  Session session = HibernateUtils.openSession();
  // 2.开启事务
  Transaction tx = session.beginTransaction();
  // 向数据库中保存一本图书:
  Book book = new Book(); // 瞬时态:没有唯一标识OID,没有与session关联.
  book.setName("Hiernate开发");
  book.setAuthor("孙XX");
  book.setPrice(65d);
  session.save(book); // 持久态:有唯一标识OID,与session关联.  
  // 3.事务提交
  tx.commit();
  // 4.释放资源
  session.close();
  book.setName("Struts2开发"); // 脱管态:有唯一的标识,没有与session关联.
}

三种状态对象转换
  瞬时态
    获得:Book book = new Book();
    瞬时--->持久:save(book)  (save()/saveOrUpdate())
    瞬时--->脱管:book.setId(1);
  持久态
    获得:Book book = (Book)session.get(Book.class,1)  (get()/load()/find()/iterate())
    持久--->瞬时:delete(book)  (特殊状态:删除态(被删除的对象,不建议去使用))
    持久--->脱管:session.close()  (close()/clear()/evict())
  脱管态
    获得: Book book = new Book();
        book.setId(1);
    脱管--->持久:session.update()  (update()/saveOrUpdate()/lock())
    脱管--->瞬时:book.setId(null)

持久态对象有自动更新数据库的能力(自动更新数据库的能力依赖了Hibernate的一级缓存)

@Test
// 测试持久态的对象自动更新数据库
public void demo2(){
  Session session = HibernateUtils.openSession();
  Transaction tx = session.beginTransaction();
  // 获得一个持久态的对象.
  Book book = (Book) session.get(Book.class, 1);
  book.setName("Struts2开发");
  // session.update(book);//不需要写这句话,在事务提交后即可完成更新
  tx.commit();
  session.close();
}

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

  1. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询

    持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...

  2. hibernate的持久化类、主键生成策略

    一.hibernate的持久化类 1.什么是持久化类: 持久化:将数据存储到关系型数据库. 持久化类:与数据库中的数据表建立了某种关系的java类.(持久化类=javabean+映射配置文件) 2.持 ...

  3. 【Hibernate】持久化对象状态及以及缓存

    一.持久化类状态 1.1 三种持久化对象的状态 1.2 区分三种状态 1.3 三种状态对象转换 1.瞬时态 2.持久态 3.脱管态 4.持久态对象有自动更新数据库的能力 一.持久化类状态 1.1 三种 ...

  4. 三、hibernate中持久化类的使用

    hibernate的持久化类 持久化:将内存中的一个对象持久化到数据库中的过程,hibernate就是一个用来进行持久化的框架 持久化类:一个Java对象与数据库中表建立了关系映射,那么这个类在hib ...

  5. Hibernate学习——持久化类的学习

    A.概念 持久化:将内存中的对象持久化(存储)到数据库的过程.Hibernate就是持久化的框架. 持久化类:一个普通java对象与数据库的表建立了映射关系,那么这个类在Hiberna中被称为持久化类 ...

  6. Hibernate中持久化类与持久化对象

    1.JavaBean类 JavaBean类是实体类,必须一下属性,private修饰的成员属性,public修饰的getter与setter访问方法,public修饰的空参构造器,实现Serializ ...

  7. 笔记:Hibernate 持久化类标注说明

    持久化类标注 标注 @Entity:注解声明该类是一个Hibernate的持久化类 标注 @Table:指定该类映射的表 参数 name:指定映射数据库表的名称 参数 uniqueConstraint ...

  8. (转) Hibernate持久化类与主键生成策略

    http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英 ...

  9. Hibernate的持久化对象

     Hibernate的持久化类 什么是持久化类        1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为是持久化类.        * ...

随机推荐

  1. linux学习之-vsftp

    一.简介 vsftp是一个基于GPL发布的类unix系统上使用的ftp服务器软件,它的全称是very secure FTP ,软件的编写初衷是为了代码的安全,另外高速与高稳定性也是vsftp的两个重要 ...

  2. INNODB自增主键的一些问题

    背景: 自增长是一个很常见的数据属性,在MySQL中大家都很愿意让自增长属性的字段当一个主键.特别是InnoDB,因为InnoDB的聚集索引的特性,使用自增长属性的字段当主键性能更好,这里要说明下自增 ...

  3. maven加载本地oracle的JDBC驱动

    转载自:http://blog.csdn.net/qicyt1812/article/details/13019933 由于oracle商业版权问题,maven不能通过中心资源库直接下载jar包,如果 ...

  4. 【python】Python遍历dict的key最高效的方法是什么?

    来源:https://segmentfault.com/q/1010000002581747 方法一:直接遍历 速度快 for key in _dict: pass 方法二:iterkeys() 速度 ...

  5. iOS 日常工作之常用宏定义大全

    转自:http://www.jianshu.com/p/213b3b96cafe 前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了 ...

  6. tableView性能优化

    针对滑动时出现卡的现象 参考:http://blog.sina.cn/dpool/blog/s/blog_b638dc890101ep3x.html?plg_nld=1&plg_auth=1& ...

  7. October 1st 2016 Week 40th Saturday

    Autumn, the year's last, loveliest smile. 秋,四季流转中的最后一抹,也是最美的那一抹微笑. I love autumn because it is the h ...

  8. git安装--linux下的安装

    一般linux自带git版本很旧,会有一定问题,可以先卸载系统自带git: yum remove git下载及安装git: wget https://github.com/git/git/archiv ...

  9. .net 获取https页面的信息 在iis7.5服务器上不管用

    让我纠结了一天多的问题,给大家看下,有相同情况的可以不用浪费时间了,本人当时找了好半天都没找到什么有用的信息,项目在本地没有问题,但部署在服务器后,获取不到https页面的信息,加入下面的代码就可以了 ...

  10. Ubuntu自定义服务

    1.准备脚本 准备好一个bash服务脚本,包括start|stop|restart等参数,将脚本文件命名为“服务名”,拷贝到/etc/init.d/目录下. 2.添加服务sudo update-rc. ...