Hibernate中的session,其实是个实体管理器。Hibernate内存里面的对象主要有三种状态
(1)瞬时状态,即对象刚被new出来的时候
(2)持久化状态,被session管理的时候,比如我们调用session.save(user)时
(3)离线状态,session关闭掉了
那hibernate是如何管理内存里面的对象的呢,其实被hibernate管理的对象都有一个id,而session里面有一个Map,《key,value》,其中的key就是指向对象的id,而value即对象本身,值得说明的是,当session关闭后,对象仍然就有id这个属性。
hibernate中有个重要提高性能的方法就是所谓的懒加载,我们可以通过设置lazy=true来实现。懒加载的意思就是说加载对象的时候其实只是加载对象的代理,直到我们用到这个对象的时候才真正从数据库里面读取。这样就带来一个问题---懒加载异常。因为懒加载的时候session一定要是open的才行,而在我们实际事务操作中,
(1) Begin
(2)dosomething
(3)close
这时候我们的session已经关闭,事务的管理很重要,我们知道我们的session什么时候应该关闭。
而在SSH开发的时候每一次request其实就是一个线程,我们要做每一个线程都对应同样一个session,这样我们才可以合理的进行open和close的操作。要实现这个需求,就必须要吧session和线程相关,可喜的hibernate提供了getcurrentsession这个函数,这个currentsession就是当前线程的session,那我们的session应该什么时候打开,什么时候关闭呢?
首先要搞清楚,request和response。一个HTTPrequest首先会经过filter,ffilter会调用doFilter方法,doFilter里面有一个参数chain 也就是一个request会在chain中不断传递,直到到了jsp为止,只是编译jsp产生response这时候我们也可以关闭我们的session。
其实这样还有问题,那就是事务的transaction每次都要begin的问题,假如我们在同一件事务调用两个不相干类的方法,那么假如transaction是在类的方法里面定义的,那么这两个transaction就不是同一个transaction,这样出现exception的时候数据就不能得到有效的回滚。为来保证事务的transaction和session同步,spring也有关于事务的配置。简单来说就是把session和transaction一起绑定。
Spring中的事务管理是通过AOP来实现的,即拦截方法,是一个独立的类,没有任何的依赖。所以我们自己就不需要自己管理事务,真是轻松。
分享到:
相关推荐
在Java的持久化框架Hibernate中,`Session`和`Transaction`是两个至关重要的概念,它们在数据管理和事务处理中起到核心作用。这篇文章将深入解析这两个概念及其相关知识点。 `Session`是Hibernate提供的一种与...
本文将深入研究Hibernate中的`Session`和`Transaction`,这两个概念是理解Hibernate工作原理的关键。 首先,让我们了解`Session`。在Hibernate中,`Session`充当了应用程序与数据库之间的桥梁,它是持久化操作的...
本篇文章将详细探讨Hibernate中Session的管理,特别是如何利用ThreadLocal解决并发问题。 首先,SessionFactory是Hibernate的核心组件,它是一个线程安全的工厂类,用于创建Session实例。SessionFactory通常在应用...
【hibernate与Session详解】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库...学习并熟练掌握Hibernate和Session,对于提升Java开发的效率和质量有着重要的作用。
3. **事务管理**:在Session中进行的数据库操作通常需要包裹在Transaction中。我们可以使用Session的beginTransaction()方法开始一个事务,commitTransaction()提交事务,rollbackTransaction()回滚事务。事务处理...
以下是Session接口的一些核心概念和方法的详细解释: 1. **对象状态**: - **自由状态(Transient)**:对象没有被持久化,也不与任何Session关联。这是对象在内存中的原始状态。 - **持久化状态(Persistent)**...
在Hibernate中,事务和Session是紧密关联的,事务的边界通常定义了Session的工作范围。 3. **持久化操作**: - **加载和检索**:使用`get()`或`load()`方法可以加载一个实体,如果对象存在于数据库,Hibernate将...
本文将深入探讨Hibernate Session的几种释放模式,以及它们在实际开发中的应用和优缺点。 1. **Transaction边界Session(Transaction Bound Session)** 这是最常见的Session管理方式,通常与Spring的@...
总的来说,Hibernate的Session接口提供了一套完整的对象持久化和数据库操作机制,使得开发者能够以面向对象的方式处理数据,极大地提高了开发效率和代码的可读性。通过深入理解和熟练运用Session,可以轻松地在Java...
在Java的持久化框架Hibernate中,管理Session和执行批量操作是优化数据库交互的关键技术。本文主要探讨了如何高效地管理Hibernate的Session以及如何实施批量处理数据,这些技巧对于提升应用程序性能至关重要。 首先...
通过分析这个工程源码,我们可以学习到如何在MyEclipse6中配置和使用Hibernate,以及如何在业务代码中正确地管理事务。这对于提升我们的Java Web开发技能,尤其是数据持久化和事务处理能力,具有极高的参考价值。...
本文将详细探讨Hibernate Session的配置、创建以及在实际应用中的实现。 一、Hibernate Session的配置 在Hibernate中,配置主要包括以下几部分: 1. **hibernate.cfg.xml**:这是Hibernate的主配置文件,其中包含...
本文将深入探讨Hibernate Session的详细方法及其应用场景,旨在为开发者提供一份全面、实用的指南。 #### 一、Session 的生命周期与事务管理 Hibernate Session的生命周期通常包括打开、使用和关闭三个阶段。在...
1. **事务管理**:在执行一系列数据库操作时,我们可以使用`Session`的`beginTransaction()`和`commit()`方法开启和提交事务。为了确保数据一致性,我们需要在发生异常时回滚事务,这可以通过`Session`的`rollback()...
本文详细介绍了 Hibernate 中 Session 的关闭实例解析,包括 getSession() 和 openSession() 的区别、getCurrentSession() 的配置、openSession() 和 getCurrentSession() 的关联,以及 Session 的关闭。希望本文...
在Hibernate中,Session是与持久化层交互的主要接口,它负责对象的持久化、检索、更新和删除等操作。当涉及到多个数据库操作时,事务管理显得尤为重要,因为它确保了数据的一致性和完整性。在Java中,通常有两种处理...
本文将详细探讨Spring与Hibernate的集成,特别是如何在集成环境中使用和管理`Session`。 首先,Spring作为一个轻量级的框架,提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,它可以帮助我们解耦应用程序...
在理解Hibernate框架中,Session是核心组件之一,它充当了应用程序和数据库之间的桥梁。`Session`接口提供了多种操作,如创建、更新、查询和删除数据,这些都是基于对象关系映射(ORM)的概念进行的。本篇文章将深入...
2. **会话和事务**:掌握SessionFactory、Session和Transaction的使用,了解事务处理的基本原则。 3. **查询语言**:学习HQL(Hibernate Query Language)和Criteria API,进行对象级别的查询。 4. **缓存机制**:...
本篇将详细讲解如何在Hibernate中手动获取Session,以及涉及到的相关配置和连接管理。 首先,理解Hibernate的核心组件——Session。Session是Hibernate中的工作单元,它是与数据库交互的主要接口,负责保存、更新和...