java session 生命周期_java之hibernate之session中对象的生命周期

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

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

96aebd056409282e0306fa84eb87b6d4.png

3.session中对象的状态

瞬时状态

持久状态

游离状态

4.对象的生命周期一:

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classHibernateTest {

@Testpublic voidtestSession1(){

Session session= null;

Transaction tx= null;

User user=null;try{//user处于瞬时状态,session没有管理该对象

user = newUser();

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------->瞬时状态

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic voidtestSession2(){

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值