JavaEE学习笔记之SSH—Hibernate(4)

本文详细探讨了Hibernate中的Session缓存,包括其作用、清理时机以及如何通过FlushMode设置清理模式。通过实例展示了对象从瞬时态到持久态再到脱管态的转换过程,并解释了save(), update(), saveOrUpdate(), load()和get()等关键API的功能和区别。此外,还提到了Hibernate对象状态转换图,以及cascade、lazy和inverse等相关概念。" 124699622,13850411,Java多线程同步:卖票案例分析,"['Java开发', '并发编程']
摘要由CSDN通过智能技术生成

今天来讲讲 Hibernate 的灵魂所在——> Session 缓存

session缓存是由一系列的Java集合构成的。当一个对象被加入到Session缓存中,这个对象的引用就加入到了java的集合中,以后即使应用程序中的引用变量不再引用该对象,只要Session缓存不被清空,这个对象一直处于生命周期中。

Session缓存的作用:

1)减少访问数据库的频率。

2)保证缓存中的对象与数据库中的相关记录保持同步。

Session清理缓存的时机:

 1)当调用Transaction的commit()方法时,commit()方法先清理缓存(前提是FlushMode.COMMIT/AUTO),然后再向数据库提交事务。

 2)当应用程序调用Session的createQuery().list()或者createQuery().iterate()时,如果缓存中的持久化对象的属性发生了变化,就会先清理缓存,以保证查询结果能反映持久化对象的最新状态。

    hibernate2中Session.find()对应于3中的session.createQuery().list()
    hibernate2中Session.iterate()对应于3中的session.createQuery().iterate()

 3)当应用程序显示调用Session的flush()方法的时候。

Session的setFlushMode()方法用于设定清理缓存的时间点。FlushMode类定义了三种不同的清理模式:FlushMode.AUTO、FlushMode.COMMIT和FlushMode.NEVER。
FlushMode.AUTO是默认值:

session.setFlushMode(FlushMode.COMMIT);

Session清理模式执行清理缓存操作的时间点:

这里写图片描述

假设现在想把两个客户信息插入到数据库中:

        Session session = HibernateSessionFactory.getSession();
        Transaction transaction = session.beginTransaction();
        Customer customer1 = new Customer(null, "张三", "78784854", "南昌");
        Customer customer2 = new Customer(null, "李四", "45646463", "北京");
        session.save(customer1);
        session.save(customer2);
        transaction.commit()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值