1. 将对象给hibernateApi操作后,对象会发不同的改变,如图:
2. 对象经历了3个阶段:
a) 瞬时状态
b) 持久状态
c) 游离状态
3. 对象生命周期一:
new--->save--->close
@Test public void testSession1(){ //新new出来的user处于瞬时状态 该对象和Session现在没有关系 User user = new User(); user.setName("张旭阳"); user.setAge(33); Transaction tx = null; try { tx = session.beginTransaction(); //user被save后 变为持久状态 持久状态下的数据 在提交事务时会进行数据同步 //数据同步:指会将Session的对象和数据库表中的数据进行对比,如果不一致会更新动作 session.save(user); user.setName("张学友"); tx.commit(); } catch (Exception e) { if(tx!=null) tx.rollback(); }finally{ //当Session被关闭 后 user处于游离状态 :等待会回收,或者再次更新 HibernateUtil.close(); } System.out.println(user); }
4. 对象的生命周期二:
get--->clear--->update--->delete
@Test public void testSession2(){ //对象之间从session中获取 获取回来后 对象已经被session管理 这时对象处于持久状态 User user = (User)session.get(User.class, 5); Transaction tx = null; try { tx = session.beginTransaction(); user.setName("刘罗锅"); tx.commit(); } catch (Exception e) { if(tx!=null) tx.rollback(); }finally{ //从session中 将数据清理掉 clear清除session中的所有数据 //user处于游离状态 session.clear(); } System.out.println(user); user.setName("刘涛"); try { tx = session.beginTransaction(); //user从游离状态变为了持久状态 session.update(user); tx.commit(); } catch (Exception e) { if(tx!=null) tx.rollback(); }finally{ session.clear(); } System.out.println(user); }
5. 总结:
瞬时状态: 内存中有数据,session中没有数据,数据库中没有。
持久状态: 内存中有数据,session中有数据,数据库中有数据。
游离状态: 内存中有数据,session中没有数据,数据库中有数据。