Session 缓存

在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 且没有清理缓存,则存放在它缓存中的对象也不会结束生命周期

Session 缓存可减少 Hibernate 应用程序访问数据库的频率。

     

       News news1 = (News) session.get(News.class, 1);
        System.out.println(news1);
        
        News news2 = (News) session.get(News.class, 1);
        System.out.println(news2);
        
        System.out.println(news2 == news1);


打印结果:

      Hibernate:
    select
        news0_.ID as ID1_0_0_,
        news0_.TITLE as TITLE2_0_0_,
        news0_.AUTHOR as AUTHOR3_0_0_,
        news0_.DATE as DATE4_0_0_
    from
        NEWS news0_
    where
        news0_.ID=?
    News [id=1, title=java, author=atguigu, date=2015-07-28 11:59:43.0]
   News [id=1, title=java, author=atguigu, date=2015-07-28 11:59:43.0]
true
所有hibernate只向数据库发了一条语句。

操作 Session 缓存

flush()使数据表中的记录与session缓存中的状态保持一致,为了保持一致,可能会发送相应的sql语句

1.在transaction的commit方法中:先调用session的flush方法,再提交事务。

2.flush可能会发送sql语句,但不会提交事务

    @org.junit.Test
    public void TestFlush(){
        News news1 = (News) session.get(News.class, 1);
        news1.setAuthor("oracle");
    }

打印结果

    Hibernate:
    select
        news0_.ID as ID1_0_0_,
        news0_.TITLE as TITLE2_0_0_,
        news0_.AUTHOR as AUTHOR3_0_0_,
        news0_.DATE as DATE4_0_0_
    from
        NEWS news0_
    where
        news0_.ID=?
Hibernate:
    update
        NEWS
    set
        TITLE=?,
        AUTHOR=?,
        DATE=?
    where
        ID=?









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值