Hibernate实体对象的生命周期(三种状态详解)

简介: Hibernate生命周期会经历三种不同的状态:    1.Transient(瞬态):实体对象在内存是自由存在的,即与数据库中的数据没有任何关系.换句话说就是:该实体从未与任何持久化上下文关联过,它没有持久化标识.例如:         //创建一个Transient对象 User user=new User();user.setName("username"); user.set

Hibernate生命周期会经历三种不同的状态:


    1.Transient(瞬态):实体对象在内存是自由存在的,即与数据库中的数据没有任何关系.换句话说就是:该实体从未与任何持久化上下文关联过,它没有持久化标识.例如:    
     

//创建一个Transient对象
 User user=new User();
user.setName("username");
 user.setPassword("password");
 //此时的user为一个Transient对象,因为没有与任何数据库的任何记录相关联.


     特征:

  • 与数据库中的记录没有任何关系,即没有与其相关联的数据库记录.

  • 与session没有任何关系.即没有通过session对象的实例对其进行任何持久化的操作.

   

    2.Persistent(持久态):该实体对象处于Hibernate框架所管理的状态,即这个实体对象与Session对象的实例相关联.例如:

//创建一个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();

    特征:

  • 每个persistent状态的实体对象都与一个session对象的实例相关联

  • 处于Persistent状态的实体对象是与数据库中的记录相关联的.

  • 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对象相关联.

  • 游离态实体对象与数据库中的记录没有直接联系,对其所做的任何修改将不会影响到到数据库中的数据.

  • 游离态实体对象在数据库有相对应的数据记录,如果没有被其他事务删除.


原文链接:


http://blog.csdn.net/hgd250/article/details/2775943

 

目录
相关文章
|
7月前
|
SQL 缓存 Java
Hibernate对象状态之间的神奇转换
Hibernate对象状态之间的神奇转换
|
4月前
|
SQL Java 数据库连接
Hibernate - QBC和本地SQL对象检索详解
Hibernate - QBC和本地SQL对象检索详解
29 0
|
4月前
|
SQL Java 数据库连接
Hibernate - HQL对象检索详解
Hibernate - HQL对象检索详解
23 0
|
10月前
|
SQL Java 数据库连接
Hibernate中的Session对象
Hibernate中的Session对象
57 0
|
缓存 Java 数据库连接
Hibernate保存对象出现 org.hibernate.NonUniqueObjectExce
Hibernate保存对象出现 org.hibernate.NonUniqueObjectExce
|
Java 数据库连接 数据库
Hibernate的方法获取对象后,对象调用set后会自动更新数据库内容的解决办法
Hibernate的方法获取对象后,对象调用set后会自动更新数据库内容的解决办法
711 0
|
SQL 缓存 Java
【SSH快速进阶】——探索Hibernate对象的三种状态:Transient、Persistent、Detached
 学习过操作系统的朋友,脑子里肯定都会有这张进程的状态转换图:
【SSH快速进阶】——探索Hibernate对象的三种状态:Transient、Persistent、Detached
|
SQL Java 数据库连接
hibernate自定义sql关联查询结果组装为对象
hibernate自定义sql关联查询后没有对应的entity,如何映射为对应的bean
205 0