Hibernate负责将实体模型,关联到关系模型。那么在程序运行过程中,如何保证实体对象与数据库中的一致性呢?
首先要了解一下Hibernate对象中的三种状态:
临时状态
在程序中第一次使用该对象。(既然是第一次使用实体对象,那么当然数据库中是没有该记录的)
即:实体模型中存在,但是不被Session管理,数据库中没有该记录。
持久状态
当临时状态的对象,执行save() 或SaveOrUpdate()方法之后,将会被Session管理。从而变成持久状态。这种状态时
即:实体模型存在,而且被Session管理了。数据库中已经存在该记录了(但是由于该记录权限不足,而无法在看到)
游离状态
持久状态的对象,在提交事务之后,将编程游离状态。提交事务,Session将关闭。
此刻的状态为:没有被Session管理,数据库中有该记录
public void testSave1(){
Session session=null;
Transaction tx=null;
try{
session=HibernateUtils.getSession();
tx= session.beginTransaction();
//创建一个新对象
User user=new User(); //Transient状态
user.setName("张三");
user.setPassword("123");
//Persistent状态的对象,当对象的属性发生变化的时候
//Hibernate在清理缓存(脏数据检查)的时候,会和数据库同步
session.save(user); //由Transient状态变为Persistent状态
tx.commit(); //由Persistent状态变为detached状态
}catch(Exception e){
e.printStackTrace();
if(tx!=null){
tx.rollback();
}
}finally{
HibernateUtils.closeSession(session);
}
}
这仅仅是一个非常简单的例子。Hibernate中对象的状态转换关系,每次在执行图中所示的方法的时候 会发生改变。
对于Hibernate对象状态的转换,如果在代码中跟一下,每执行一步,对比看Session和数据库中的记录。很容易就能明白状态是如何转换的了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zc474235918/article/details/48013697