Hibernate三种状态的区别,持久化状态与一级缓存,懒加载,急加载

Hibernate的三种状态

1、瞬时状态 : 由 new 操作符创建,且尚未与Hibernate Session 关联的对象是瞬时的` ,如果没有被使用,还会被gc回收:

   //瞬时状态
            RoleEntity r=new RoleEntity();
            r.setRoleName("教师");`

2、持久状态 ---->内存中存在,数据库中也存在,在相关联的Session的作用范围内,是持久状态的,在修改持久状态的时候,不会去立即同步数据库,会先放入到一级缓存,当我们提交事务的时候, hibernate会自动执行update,把缓存与数据库同步

   Transaction tr= session.getTransaction();

        tr.begin();
            /***持久状态**/
            session.save(r);
            //操作持久状态
            r.setRoleName("学生");

        tr.commit();
            /***持久状态**/
        session.close();

3、游离状态------>在内存中存在,在数据库中不一定存在,在相关联的Session的关闭后,当与新的Session的关联后,又会变成的持久状态

Hibernate的缓存

1、默认支持一级缓存,一级缓存是session级别,可以减少访问数据库的次数
2、可插拨式的缓存,二级缓存,二级缓存是sessionFactory 级别的缓存

    @Test
    public  void load(){
        RoleEntity roleEntity= session.load(RoleEntity.class,"4028808e70e654ea0170e654f12b0000");
        //因为使用的是loa方法其实是将roleEntity放在一级缓存Session当中,并未执行sql语句,而当在调用对象属性的时候才执行sql语句,去查询数据库
         System.out.println("session关闭之前"+roleEntity.getRoleName());
        //一级缓存
        session.close();
        //一级缓存关闭,roleEntity.getRoleName是在内存中提取到
        System.out.println("session关闭之后"+roleEntity.getRoleName());
    }
 @Test
    public  void load(){
        RoleEntity roleEntity= session.load(RoleEntity.class,"4028808e70e654ea0170e654f12b0000");
         //System.out.println("session关闭之前"+roleEntity.getRoleName());
        //一级缓存
        session.close();
        //一级缓存关闭,此时执行则会抛出noSession的错误,不再与数据库有连接
        System.out.println("session关闭之后"+roleEntity.getRoleName());
    }

懒加载,急加载

1.什么是懒加载,什么是急记载,如何使用?
懒加载就是延迟加载,急记载就是立即加载
load方法支持懒加载,,get方法支持急加载

2.懒加载和急加载的区别?
懒加载就是load方法,对象先放在一级缓存当中,当要调用对象属性的时候,才会去连接数据库进行操作,然后将查出来的数据存放到一级缓存中,但Session关闭时,当Session关闭时,继续操作对象属性就会抛出noSession的错误,因为不再与数据库有连接

急记载就是get方法,马上查询数据库,然后将查出来的数据存放当一级缓存中,即使Session关闭,依然可以获得数据,因为数据存放到内存当中

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值