Hibernate 笔记3 关于SessionFactory,Session 以及 三大状态(Transient、Persistent、Detached)...

 Configuration,SessionFactiory,Session:

 

Configuration:

                         负责管理Hibernate的配置信息,这些配置信息都是从配置文件hibernate.cfg.xml或者Hibernate.
                         properties读取的,当然也可以自定义文件名称,只要在实例化Configuration的时候指定具体的路径就可以了;
SessionFactiory:

                        Configuration的实例会根据当前的配置信息,构造SessionFactory实例。只创建一次,SessionFactory是线程安全的,一般情况下一个应用中一个数据库共享一 个                            SessionFactory实例。
Session:         一般的持久化方法(CRUD)都是通过Session来调用的,Session是非线程安全的。最好一个业务开启一个Session,同时开启一个事物,Session关掉事物也关                                        掉,最好是这样保持他们的生命周期一致。

 

二 三大状态(Transient、Persistent、Detached)

Transient状态(临时态/瞬时态)最大的特征是:
          * 在数据库中没有与之匹配的数据
          * 没有纳入session的管理
          通过new操作创建出来的对象,此时的对象未被纳入session管理,数据库中没有相对应的记录
Persistent状态(持久态)最大的特征是:
          * 在数据库中有与之匹配的数据
          * 纳入了session的管理
          * 在清理缓存(脏数据检查)的时候,会和数据库同步

Detached状态(游离态/托管态)最大的特征是:
          * 在数据库中有与之匹配的数据
          * 没有纳入session的管理

 

                                       三大状态图

 

 

 

三大状态举例:

 

public class SessionTest extends TestCase {

public void testSession(){
Session session = null;
Transaction tx = null;
User user = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction();

//Transient状态,临时状态,一经save就会转变到Persistent状态
user = new User();
user.setName("中田");
user.setPassword("nakada");
user.setCreateTime(new Date());
user.setExpireTime(new Date());

//Persistent状态,持久化状态(数据库中有相同的值与之对应),当属性发生改变时,hibernate会自动与数据库同步,不需要update,update的实质不是更新数据,而是转换状态。
session.save(user);
user.setName("幸島");
tx.commit();
}catch (Exception e){
e.printStackTrace();
tx.rollback();
}finally {
HibernateUtils.closeSession(session);
}

//Detached状态,游离状态,session关闭之后,便由persistent状态变为Detached状态
try{
session = HibernateUtils.getSession();
session.beginTransaction();
user.setName("幸島");
//在Detached状态下,更新对象的属性,需要update才能反映到数据库
session.update(user);
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
}


 

 

 

转载于:https://www.cnblogs.com/zilong882008/archive/2011/11/03/2234420.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值