博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java之hibernate之session中对象的生命周期
阅读量:5038 次
发布时间:2019-06-12

本文共 2320 字,大约阅读时间需要 7 分钟。

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);    }}
View Code

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);    }
View Code

6.对象生命状态总结

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

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

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

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

 

转载于:https://www.cnblogs.com/Vincent-yuan/p/11198613.html

你可能感兴趣的文章
redhat 7 源码安装 mysql5.5.49
查看>>
Android官方技术文档翻译——ApplicationId 与 PackageName
查看>>
Feign使用Hystrix无效原因及解决方法
查看>>
Sam做题记录
查看>>
hexo 搭建博客
查看>>
建造者模式(屌丝专用)
查看>>
Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
查看>>
C++的引用
查看>>
python itertools
查看>>
http://lorempixel.com/ 可以快速产生假图
查看>>
编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成...
查看>>
文件操作
查看>>
NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
查看>>
graphite custom functions
查看>>
ssh无密码登陆屌丝指南
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
[CF803C] Maximal GCD(gcd,贪心,构造)
查看>>
oracle连接的三个配置文件(转)
查看>>
Java 8 中如何优雅的处理集合
查看>>
[HNOI2012]永无乡 线段树合并
查看>>