上篇博客介绍了自己对Hibernate三种状态的理解,这一篇主要是通过实例演示去进一步的理解三种状态。
persistent状态:
此时的状态持久化对象纳入的session的管理,当提交事物时,数据会和数据库同步,如果有更新的数据将产生更新语句。
session=HibernateUtils.getSession(); tx=session.beginTransaction(); //transient状态,此时的对象没有纳入session管理 user=new User(); user.setName("张三"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //persistent状态 //persistent状态的对象当对象的属性发生改变的时候 //hibernate清理缓存(脏数据)的时候,会和数据库同步。 session.save(user); user.setName("李四"); tx.commit(); } catch (Exception e) { e.printStackTrace(); if (tx!=null) { tx.rollback(); } }finally{ HibernateUtils.closeSession(session); //关闭session此时是datached状态 }
产生的SQL语句:
datached状态:
此时的状态不被数据库管理,但是在数据库中存在相应的数据。在此状态下重新拿一个session进行提交会将状态重新变为persistent状态,会将数据在数据库中更新。
try { session=HibernateUtils.getSession(); tx=session.beginTransaction(); //transient状态 user=new User(); user.setName("张三"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //persistent状态 //persistent状态的对象当对象的属性发生改变的时候 //hibernate清理缓存(脏数据)的时候,会和数据库同步。 session.save(user); user.setName("李四"); tx.commit(); } catch (Exception e) { e.printStackTrace(); if (tx!=null) { tx.rollback(); } }finally{ HibernateUtils.closeSession(session); } //datached状态,重新拿一个session进行提交。 user.setName("王五"); try { session=HibernateUtils.getSession(); session.beginTransaction(); //将datached状态的对象重新纳入session的管理 //此时将变为persistent状态对象 session.update(user); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils.closeSession(session); }
产生的SQL语句:
总之,在persistent状态时会将对象纳入到session的管理,无论对象是插入还是更新都会就将最后的数据同步到数据库,并产生相应的sql语句;当关闭session时处于datached状态,此时如果重新开启一个session会将对象重新纳入到session中,当session提交会将数据提交,并产生对应的更新sql语句。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-07 10:58:17