一、hibernate实体的三种状态:

1、瞬时状态

RoleBean role = new RoleBean();    一个实体的瞬时状态------只存于内存中,与数据库无关

 

2、持久状态

session.save(role);保存数据库中      一个实体的持久状态------存于内存,也存于数据库
role.setName("学生");操作持久状态
tr.commit();提交并同步

注意:操作持久状态时,修改的是缓存中的数据,这样提交时缓存会和数据库同步,若数据不一致就会update数据库。前提必须有事务支持!

 

3、游离状态

session.close();
一个实体的游离状态-----内存中存在,数据库不一定存在

注意:游离状态与数据库断开连接,session缓存关闭,这时改变数据不会同步到数据库

 

二、hibernate的懒急加载

1、急加载

@Test
    public void get(){
        RoleBean r = session.get(RoleBean.class, "4028821870e66d440170e66d46d70000");//直接查找数据库,并将返回数据放入缓存!
        System.out.println(r.getName());//从缓存中查找---可以查找
        session.close();//与数据库断开连接
        System.out.println(r.getName());//从缓存中查找---可以查找
    }

重点:急加载直接查找数据库,将返回数据放入缓存中!无论session关闭否,都可以找到数据。

 

2、懒加载

@Test
    public void load(){
        RoleBean r = session.load(RoleBean.class, "4028821870e66d440170e66d46d70000");//放入缓存,不会查找数据库!
        System.out.println(r.getName());//从数据库中查找,再把信息放入缓存(内存)------存在一级缓存

        session.close();//与数据库断开连接(no-session)

        System.out.println(r.getName());//从缓存中查找!!---可以查找


        /*RoleBean r2 = session.load(RoleBean.class, "4028821870e66d440170e66d46d70000");//放入缓存
        session.close();//与数据库断开连接(no-session)
        System.out.println(r.getName());//从缓存中查找!!-----不存在一级缓存,所以查找不到
        */
    }

重点:懒加载查找数据不会查找数据库,先放入缓存!调用语法时再从数据库中查找数据,并放入缓存。若没有数据放入缓存,就找不到数据。

 

版权声明:本文为shengxie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shengxie/p/12511129.html