今天来讲讲 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()