Hibernate生命周期会经历三种不一样的状态:java
1.Transient(瞬态):实体对象在内存是自由存在的,即与数据库中的数据没有任何关系.换句话说就是:该实体从未与任何持久化上下文关联过,它没有持久化标识.例如:
数据库
//建立一个Transient对象 User user=new User(); user.setName("username"); user.setPassword("password"); //此时的user为一个Transient对象,由于没有与任何数据库的任何记录相关联.
特征:
session
与数据库中的记录没有任何关系,即没有与其相关联的数据库记录.框架
与session没有任何关系.即没有经过session对象的实例对其进行任何持久化的操做.ide
2.Persistent(持久态):该实体对象处于Hibernate框架所管理的状态,即这个实体对象与Session对象的实例相关联.例如:spa
//建立一个Transient对象 User user=new User(); user.setName("username"); user.setPassword("password"); //此时的user为一个Transient对象,由于没有与任何数据库的任何记录相关联. Session session = sessionFactory.openSession(); Transaction tx=session.beginTransaction(); //此时的user仍为一个Transient对象 session.save( user ); //此时的user为Persistent tx.commit(); //提交后向数据库中加入一条记录. Transaction tx2=session.beginTransaction(); user.setPassword("abc"); tx2.commit(); //虽然在这个事务中没有调用Session的save()方法来保存user对象 //但因为user对象处于persistent状态,因此对user所作的任何修改都将被持久 //化到数据库,因此这时数据库中的密码已经变为:abc; session.close();
特征:
.net
每一个persistent状态的实体对象都与一个session对象的实例相关联对象
处于Persistent状态的实体对象是与数据库中的记录相关联的.blog
Hibernate会依据persistent状态的实体对象的属性变化而改变数据库中相对应的记录.生命周期
3.Detached(游离态也叫脱管态):对于Persistent对象,当再也不与它所对应的Session对象相关联时,这个对象就是游离态.
//建立一个Transient对象 User user=new User();http://writeblog.csdn.net/PostEditPlain.aspx 我的空间—后台 user.setName("username"); user.setPassword("password"); //此时的user为一个Transient对象,由于没有与任何数据库的任何记录相关联. Session session = sessionFactory.openSession(); Transaction tx=session.beginTransaction(); //此时的user仍为一个Transient对象 session.save( user ); //此时的user为Persistent tx.commit(); //提交后向数据库中加入一条记录. session.close(); //此时user为Detached 状态,此时对user所进行的任何修改, //将不会对数据库有任何影响.
特征:
游离态是由持久态实体对象转变而来的.
游离态实体再也不与session对象相关联.
游离态实体对象与数据库中的记录没有直接联系,对其所作的任何修改将不会影响到到数据库中的数据.
游离态实体对象在数据库有相对应的数据记录,若是没有被其余事务删除.
原文连接: