hibernate对象管理的三种状态


hibernate的对象三种状态

 

 

临时状态  

在hibernate没有对对象进行读写等操作上的交集,此时实体类对象处于临时状态。

例如:

User u = new User();

持久状态

 

 

        //获取会话对象
        Session session = SessionFactoryUtils.openSession();
        //开启事务
        Transaction trants = session.beginTransaction();
        //懒加载,此时返回的user对象为代理对象,只有oid标识列属性有值,其余部分空值
        User u = session.load(User.class, user.getId());
        //在事务间访问此代理对象除了oid字段的其他属性,将会触发对象初始化操作,为对象赋上完整的字段值
//        System.out.println(u);
        //启用hibernate的初始化操作
        Hibernate.initialize(u);
        //提交事务
        trants.commit();
        //关闭会话
        SessionFactoryUtils.closeSession();
//              LazyInitializationException:懒(延迟)加载异常        

托管状态

 当hibernate执行了事务提交(commit),会话关闭(close),会话重置(clear),清除指定缓存对象(evict)时,对象由持久态转换为托管态(游离态)

不过仍然可以通过update或save等动作重新切换到持久态,而删除则直接转变为瞬时态。

              User user = session.get(User.class, 6);
//            if(null!=user)
//                session.update(u);
//                session.merge(u);//可以同时标记相同的持久态对象
//            提交事务/回滚事务
              transaction.commit();
//            关闭Session
              session.close();

 

posted @ 2020-08-26 20:19  _未来可期  阅读(151)  评论(0编辑  收藏  举报