美文网首页
Hibernate对象的生命周期

Hibernate对象的生命周期

作者: 叫我不矜持 | 来源:发表于2019-02-23 11:30 被阅读2次

    1. 对象生命周期图

    hibernate对象生命周期.png

    2. 对象的 3 种状态

    • a) 临时状态/瞬时状态
      该对象是新创建的;一个持久化状态的对象被删除;一个游离状态的数据被删除
    • b) 持久化状态
      对象从数据库中查询出来时,临时状态的数据被保存时,游离状态的数据被更新/
      锁定
    • c) 游离状态
      持久化状态的数据被(session)清理

    3.对象生命周期案例一

    public void testSession() {
            Session session = null;
            // 瞬时状态
            User u = new User("西毒", 70);
            try {
                session = HibernateUtil.getSession();
                session.beginTransaction();
                // 持久状态----做脏数据检查 将 session 数据和数据库同步
                session.save(u);
                u.setAge(80);
                // session.update(u);
                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            } finally {
                if (session != null) {
                    session.close();
                }
            }
            // 对象 u 是游离状态
            System.out.println("======" + u);
            try {
                session = HibernateUtil.getSession();
                session.beginTransaction();
                // 删除
                session.delete(u);
                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            } finally {
                if (session != null) {
                    session.close();
                }
            }
            // 瞬时状态
            System.out.println("======" + u);
        }
    
    

    4. 对象生命周期案例二

    public void testGet(){
            Session session = null;
            User u =null;
            try{
                session = HibernateUtil.getSession();
                session.beginTransaction();
                //持久状态
                /*
                * get 查询数据如果数据不存在则返回 null
                * load 查询数据如果数据不存在则抛出异常
                * */
                u = (User)session.get(User.class,4);
                //u = (User)session.load(User.class, 50);//瞬时状态
                session.delete(u);
                session.getTransaction().commit();
            }catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }finally{
                if(session!=null){
                    session.close();
                    }
            }
            System.out.println("===="+u);
            try{
                session = HibernateUtil.getSession();
                session.beginTransaction();
                //持久状态 save 直接添加数据发出一条 insert 语句
                session.save(u);
                //saveOrUpdate 判断保存的对象是否有 id,如果有则发出
                update 语句
                //如果没有则发出 insert 语句
                //session.saveOrUpdate(u);
                session.getTransaction().commit();
            }catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }finally{
                if(session!=null){
                    session.close();
                }
            }
        }
    
    @Test
        public void testDelete() {
            Session session = null;
            User u = null;
            try {
                session = HibernateUtil.getSession();
                session.beginTransaction();
                u = new User();
                u.setId(7);
                session.delete(u);
                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            } finally {
                if (session != null) {
                    session.close();
                }
            }
        }
    
        @Test
        public void testUpdate() {
            Session session = null;
            User u = null;
            try {
                session = HibernateUtil.getSession();
                session.beginTransaction();
                u = new User();
                u.setId(3);
                u.setName("南帝");
                u.setAge(66);
                session.update(u);
                session.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            } finally {
                if (session != null) {
                    session.close();
                }
            }
        }
    
    

    5. 总结

    • 临时状态:内存有,数据库没有
    • 持久状态:内存有,session 有,数据库有
    • 游离状态:内存有,数据有

    相关文章

      网友评论

          本文标题:Hibernate对象的生命周期

          本文链接:https://www.haomeiwen.com/subject/cpnuyqtx.html