在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期
一级缓存是存在的,通过get()查询Customer对象,查询两次ID为1的Customer对象,控制台只发送了一条SQL,并且打印c1和c2,获得的地址是一样的,可以证明Session缓存是存在的
@Test public void testSessionExist() { Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer c1 = (Customer) session.get(Customer.class, 1); System.out.println(c1); Customer c2 = (Customer) session.get(Customer.class, 1);// 再次执行查询,直接使用一级缓存中数据 System.out.println(c2); transaction.commit(); session.close(); }
Session缓存和快照的存储原理
@Test public void testSession02() { Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer c = (Customer) session.get(Customer.class, 1); //persistent状态对象 c.setName("孙艺珍"); //修改一级缓存中的数据 //session.save(c); //不调用save()方法 transaction.commit(); session.close(); }
在没有调用save()情况下,程序依然更新了ID为1的Customer对象
代码层面关闭事物,在hibernte.cfg.xml中配置hibernate.connection.autocommit事物自动提交,但数据然仍没有被修改,只有flush()后才会去比较一级缓存和快照区数据是否一致,commit()中已经调用flush()了
@Test public void testSession02() { Session session = HibernateUtils.openSession(); Customer c = (Customer) session.get(Customer.class, 1); //persistent状态对象 c.setName("孙艺珍"); //修改一级缓存中的数据 session.flush(); //session.save(c); //不调用save()方法 session.close(); }
默认情况下 Session 在以下时间点刷出缓存:
- 当应用程序调用 Transaction 的 commit()方法的时, 该方法先刷出缓存(session.flush()),然后在向数据库提交事务(tx.commit())
- 当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,会先刷出缓存,以保证查询结果能够反映持久化对象的最新状态
- 调用 Session 的 flush() 方法
相关推荐
7. **Constants Configuration**:常量配置可能包括缓存级别、二级缓存配置、实体的默认状态(如是否自动提交)等,这些配置可以显著影响性能。 8. **Entity Mapping**:介绍了如何通过XML或注解将Java类映射到...
3. **缓存策略**: Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别)。理解何时使用一级缓存和二级缓存,以及它们的工作原理,对于提升应用程序性能至关重要。 4. **关联映射**: Hibernate...
《孙卫琴精通Hibernate Part1》是一份关于深入学习Hibernate框架的教程,涵盖了该框架的基础与进阶内容。本部分是整个系列的前三章节,旨在帮助开发者全面理解Hibernate的工作原理和核心特性,以便在实际开发中高效...
Hibernate的缓存分为一级缓存和二级缓存两部分: - **一级缓存**:也称为Session级别的缓存,是默认开启的。当Session关闭后,该缓存中的数据就会被清除。 - **二级缓存**:也称为SessionFactory级别的缓存,它不是...
8. Cache机制:解释Hibernate的缓存策略,包括第一级缓存和第二级缓存,以及如何配置和优化缓存以提高系统性能。 9. 性能优化:讨论如何通过合理的设计和配置提升Hibernate应用的性能,包括延迟加载、批处理和连接...
22.3 管理Hibernate的第一级缓存 22.4 管理Hibernate的第二级缓存 22.4.1 配置进程范围内的第二级缓存 22.4.2 配置集群范围内的第二级缓存 22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级...
8. **缓存机制**:Hibernate的缓存策略,包括一级缓存(Session级别的)和二级缓存(SessionFactory级别的),以及第三方缓存集成,如 EhCache。 9. **事务管理**:介绍Hibernate的事务处理,包括编程式和声明式...
6. **Cache**:缓存机制用于提高应用程序性能,Hibernate支持一级缓存和二级缓存。 7. **Entity Manager**:Java Persistence API (JPA)引入的概念,为开发者提供了一组统一的接口,用于管理实体对象的生命周期。 ...
5. **缓存机制**:讨论了Hibernate的缓存层次结构,包括一级缓存(Session缓存)和二级缓存(SessionFactory缓存),以及第三方缓存实现,如Ehcache和Infinispan。 6. **事务管理**:讲解了Hibernate的事务处理,...
处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 Java对象在JVM中的 生命周期 179 8.2 理解Session的缓存 181 8.2.1 Session的缓存的作用 182 ...
- **缓存机制**:介绍Hibernate的一级缓存和二级缓存,以及如何利用它们优化性能。 - **懒加载与立即加载**:解释这两种加载策略的区别及其应用场景。 - **多对多关联**:介绍如何在Hibernate中实现多对多关联,...
22.3 管理Hibernate的第一级缓存 22.4 管理Hibernate的第二级缓存 22.4.1 配置进程范围内的第二级缓存 22.4.2 配置集群范围内的第二级缓存 22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级...
22.3 管理Hibernate的第一级缓存 22.4 管理Hibernate的第二级缓存 22.4.1 配置进程范围内的第二级缓存 22.4.2 配置集群范围内的第二级缓存 22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级...
22.3 管理Hibernate的第一级缓存 22.4 管理Hibernate的第二级缓存 22.4.1 配置进程范围内的第二级缓存 22.4.2 配置集群范围内的第二级缓存 22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级...
标题“hibernate-distribution-3.3.1.part4”和描述中提到的关键词“hibernate-distribution-3.3.1.part4”暗示了这是一个关于Hibernate ORM框架的旧版本分发包,可能是其3.3.1版本的一部分。Hibernate是一个广泛...
处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 Java对象在JVM中的 生命周期 179 8.2 理解Session的缓存 181 8.2.1 Session的缓存的作用 182 ...
4. **建立数据访问层**:使用Hibernate的SessionFactory和Session接口,通过注解或XML映射文件来实现对象与数据库表之间的映射。 5. **Spring与Hibernate整合**:将Hibernate的SessionFactory注入到Spring中,通过...
5. **缓存机制**:Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,能提高性能,减少对数据库的访问。二级缓存则可以通过插件如Ehcache实现,可以跨会话共享...
8. **缓存机制**:可能涉及到Hibernate的一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),以及第三方缓存插件如EhCache的配置和使用。 9. **事件监听器**:如PreInsertEventListener、...
在Java Web开发领域,SSH(Struts 2、Spring、Hibernate)是一个常见的开源框架组合,用于构建高效、灵活的企业级应用程序。这个名为“javaweb_part2”的学习资源可能聚焦于SSH框架的深入理解和实践应用。 **Struts...