1. session是用来执行对象的crud操作,并且session是对象事务工厂。session是线程级别的,所以生命周期比较短。

2.session中对象的生命周期图:

3.session中对象的状态

瞬时状态

持久状态

游离状态

4.对象的生命周期一:

new---->瞬时状态----->save------>持久状态----->close----->游离状态

public class HibernateTest {
@Test
public void testSession1(){
Session session = null;
Transaction tx = null;
User user=null;
try {
//user处于瞬时状态,session没有管理该对象
user = new User();
user.setName("小菜");
user.setAge(40);
session = HibernateUtil.getSession();
//获取事务
tx = session.getTransaction();
//开启事务
tx.begin();
//被保存后 user处于持久状态,session开始管理该对象
//处于持久状态的数据 session会进行脏数据检查
session.save(user);
user.setName("菜10");
//提交事务----提交事务后进行脏数据检查后 会进行数据同步
tx.commit(); } catch (Exception e) {
if(tx!=null)
tx.rollback();
}finally { HibernateUtil.close();
}
//user处于游离状态 session不管理user
System.out.println("user==="+user);
}
}

5.对象的生命周期二:
get---->直接进入持久化状态---->clear------>游离状态------>update------->持久化状态------->delete------->瞬时状态

@Test
public void testSession2(){
Session session = null;
Transaction tx = null;
User user=null;
try {
session = HibernateUtil.getSession();
//获取事务
tx = session.getTransaction();
//开启事务
tx.begin();
//直接从数据库中获取数据 数据处于持久状态
user = (User)session.get(User.class, 3);
//清理session中的所有数据 user不被session管理 处于游离状态
session.clear();
user.setName("卫斯理");
user.setAge(90);
//执行更新操作后 user处于持久状态
session.update(user);
//执行delete处于瞬时状态
session.delete(user);
tx.commit(); } catch (Exception e) {
if(tx!=null)
tx.rollback();
}finally { HibernateUtil.close();
}
//user处于瞬时状态 session不管理user
System.out.println("user==="+user);
}

6.对象生命状态总结

瞬时状态:session中没有,数据库中也没有

持久状态:session中有,数据库中也有

游离状态:session中没有,数据库中有

7.在执行对象的删除和对象的更新时,应遵循对象的生命周期状态图,也就是应该先查询后更新或删除。

java之hibernate之session中对象的生命周期的更多相关文章

  1. JAVA面试题:Spring中bean的生命周期

    Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...

  2. SOUI中对象的生命周期管理

    C++程序员最难的一环就是处理内存泄漏. 很多情况下,一个对象在一个模块里分配了内存,忘记了释放,或者在另一个模块里释放都会导致内存相关的问题. SOUI中大部分暴露在应用层的对象都使用类似COM的引 ...

  3. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. hibernate学习系列-----(3)Session 缓存和持久化生命周期以及Session 基本操作

    Session缓存原理 为了能够在控制台更好的看到我们的hibernate干了些什么,可以在hibernate.cfg.xml文件中写入如下配置: <!-- print all generate ...

  5. 第四章 Spring.Net 如何管理您的类___对象的生命周期链

    各位,实在不好意思,因为有事,博客几天没更新了.前面有童鞋提到,配置 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容.在下一章会详细介绍. 传统的Net应用中, ...

  6. Hibernate中Java对象的生命周期

    一个对象的出生源于我们的一个new操作,当我们使用new语句创建一个对象,这个对象的生命周期就开始了,当我们不在有任何引用变量引用它,这个对象就的生命就此结束,它占用的内存就可以被JVM的垃圾回收器回 ...

  7. [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Hibernate 通过 Session 操纵对象

    Session 概述 •Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法. •Session 具有 ...

  9. Hibernate学习(4)- Hibernate对象的生命周期

    1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联:2.持久化状态(Pa ...

随机推荐

  1. P3396 哈希冲突(思维+方块)

    题目 P3396 哈希冲突 做法 预处理模数\([1,\sqrt{n}]\)的内存池,\(O(n\sqrt{n})\) 查询模数在范围里则直接输出,否则模拟\(O(m\sqrt{n})\) 修改则遍历 ...

  2. MySQL的ROUND函数

    ROUND(X) ROUND(X,D) 返回参数X, 其值接近于最近似的整数.在有两个参数的情况下,返回 X ,其值保留到小数点后D位,而第D位的保留方式为四舍五入.若要接保留X值小数点左边的D 位, ...

  3. Java 12 骚操作, 文件比对居然还能这样玩!

    Java 13 都快要来了,12必须跟栈长学起! Java 13 即将发布,新特性必须抢先看! 之前分享了一些 Java 12 的骚操作,今天继续,今天要分享的是 Java 12 中的文件比对骚操作. ...

  4. freemarker null异常详解及兼容模式

    在读取user的时候,因为为空,报错了,错误处的代码是这样的 <#if user> 其实准确的写法应该是 <#if user??> 如果要消除错误,需要把前端代码修后成后面这种 ...

  5. c# 通过json.net中的JsonConverter进行自定义序列化与反序列化

    https://www.cnblogs.com/yijiayi/p/10051284.html 相信大家在工作中会经常遇见对json进行序列化与反序列化吧,但通常的序列化与反序列化中的json结构与c ...

  6. Linux中root用户找不到JAVA_HOME

    Linux中root用户找不到JAVA_HOME   在Ubuntu环境中安装好Java环境后设置环境变量:在/etc/profile中设置好了JAVA_HOME变量并引入到PATH中,用于Ubunt ...

  7. PostgreSQL--with子句

    在PostgreSQL中,WITH查询提供了一种编写辅助语句的方法,以便在更大的查询中使用.它有助于将复杂的大型查询分解为更简单的表单,便于阅读.这些语句通常称为公共表表达式(Common Table ...

  8. java算法 -- 基数排序

    基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较.由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排 ...

  9. 屠龙术&平凡的世界

    x 听过很多道理,却依然过不好这一生 小时候,总觉得世上肯定存在屠龙术.就像<倚天屠龙记>里面张无忌学的<乾坤大挪移>/<九阳真经>一般, 学会了就可以一人单挑光明 ...

  10. vue-cli3 中console.log报错

    Module Warning (from ./node_modules/eslint-loader/index.js):error: Unexpected console statement (no- ...