zoukankan      html  css  js  c++  java
  • 4、Hibernate三种状态的讲解

    Hibernate常见的三种状态的讲解:

    Transient : 瞬时的状态,new出来的对象,即没有被持久化,也不存在Session缓存中,即没有被session管理。

    Persistent:持久化的状态,数据库中有,并且也在session缓存中中。

    Detached :离线状态,指的是,已经被持久化,既数据库中有;但是不在session范围中。

                    一般是session.close(),session关闭了或者是session.clear(),session清空了缓存。

    (1)由Transient 状态变为Persistent状态,save()或者update()方法

                User u = new User();
                u.setPassword("123");
                //以上u就是Transient(瞬时状态),表示没有被session管理并且数据库中没有
                //执行save之后,被session所管理,而且,数据库中已经存在,此时就是Persistent状态
                session.save(u);

    (2)在Persistent状态,分析具体执行了几条的sql语句

                User u = new User();
                u.setNickname("赵晓七");//以上u就是Transient(瞬时状态),表示没有被session管理并且数据库中没有
                //执行save之后,被session所管理,而且,数据库中已经存在,此时就是Persistent状态
                session.save(u);
                //此时u是持久化状态,已经被session所管理,当在提交时,会把session中的对象和目前的对象进行比较
                //如果两个对象中的值不一致就会继续发出相应的sql语句
                u.setNickname("赵晓其");
                //此时会发出2条sql,一条用户做插入,一条用来做更新

    (3)在Persistent状态下,执行session.update()的方法,session.save(u),是没有意义的语句,

         原因在于在Persistent状态下,如果u这个对象和session中的对象不一致,会发出sql语句完成更新。

                                           不需要手动的调用session.update()或者session.save().

               

    User u = new User(); u.setBorn(sdf.parse("1976-2-3")); u.setUsername("zxq"); u.setNickname("赵晓八"); u.setPassword("123"); session.save(u); u.setPassword("222"); //该条语句没有意义 session.save(u); u.setNickname("赵晓吧"); //没有意义 session.update(u); u.setBorn(sdf.parse("1988-12-22")); //没有意义 session.update(u);

    (4)session.load(User.class,id),也会把一个Transient 状态,变为Persistent状态。

               //此时u是Persistent
                User u = (User)session.load(User.class, 10);
                //由于u这个对象和session中的对象不一致,所以会发出sql完成更新
                u.setUsername("aaa");

    (5)session.clear(),清空session管理范围的对象

        

               //此时u是Persistent
                User u = (User)session.load(User.class, 11);
                u.setUsername("123");
                //清空session
                session.clear();

    (6)

  • 相关阅读:
    SpringMvc上手学习
    UITapGestureRecognizer 和 UICollectionView、UITableView的点击事件冲突问题
    Omnigraffle 许可证
    REACT-NATIVE
    iOS @property、@synthesize和@dynamic
    WWDC2018 之 优化 App Assets Optimizing App Assets
    WWDC2018 之 高性能 Auto Layout
    链表
    Your development team, "", does not support the Push Notifications capability.
    xcode无线调试
  • 原文地址:https://www.cnblogs.com/zhangbaowei/p/4853431.html
Copyright © 2011-2022 走看看