Hibernate对象状态

来源:互联网 发布:三维插值算法 编辑:程序博客网 时间:2024/06/05 05:15

      1) 瞬时状态Transient

            1> 和数据库记录没有关系,和session没有关系

            2> 来源:new出来的对象就是瞬时状态(因为也就是在内存中,和数据库没关系,所以瞬间就没了微笑

            3>  转化为持久化状态:save、saveOrUpdate

            4>  说明:对瞬时状态的对象进行任何操作都不会影响数据库

      2)持久化状态Persistent

            1>  和数据库记录有关系,和session有关系

            2>  来源:瞬时状态对象通过save,或者执行查询(如get、load等)

            3>  说明:对持久化状态的对象进行操作,Hibernate都可以自动检测到,然后通过sql语句影响到数据库中记录

            4>  例子

                 I.  修改例子:

         User user = new User();         user.setName("sky");         session.save(user);         user.setName("moon");
            结果为:

        Hibernate: insert into t_user (name) values (?)        Hibernate: update t_user set name=? where id=?
               数据库中显示的名字为moon

           说明对持久化状态对象进行操作都可以影响到数据库中记录

               II. 生成id例子

        User user = new User();        user.setName("sky");        System.out.println(user.getId());        session.save(user);        System.out.println(user.getId());
             结果为:

       0       Hibernate: insert into t_user (name) values (?)       12
            可以看出:持久化状态的对象都是有id的
            III.  执行时机例子

       User user = new User();       user.setName("sky");       System.out.println("--------");       session.save(user);       System.out.println("-----------");
            结果为:

      --------      Hibernate: insert into t_user (name) values (?)     -----------
          可以看出:执行save方法后,就立即执行sql更新数据库,而不是等待commit的时候再一次执行(因为要生成id)

      3)游离状态Detached 

           1>  和数据库中记录有关系,和session没有关系

           2>  来源:session通过关闭或者剔除操作,将持久状态对象从session中剔除出来(close,clear,evict)

           3>  说明:因为和session无关了,对游离状态对象的操作不能影响数据库中的记录

      4) 删除状态

          1>  和数据库中记录无关系,和session有关系

          2>  来源,session通过delete方法从数据库中删除对象之后对象的状态








0 0
原创粉丝点击