`

Session和SessionFactory的多线程问题

阅读更多

Session:是非线程安全的,生命周期较短,代表一个和数据库的连接,在B/S系统中一般不会超过一个请求,内部维护一级缓存和数据库连接,如果Session长时间打开会长时间占用内存和数据库连接。

SessionFactory:是线程安全的,一个数据库对应一个SessionFactory,生命周期长,一般在整个系统生命周期内有效;SessionFactory保存着数据库连接的相关信息(user,password,url)和映射信息,一级Hibernate运行时用到的一些信息。

 

分享到:
评论

相关推荐

    新Hibernate SessionFactory().getCurrentSession()猫腻

    在实际开发中,如果对这个方法的内部机制不熟悉,可能会导致并发问题,比如多个线程共享同一个Session,或者在没有正确配置事务管理时引发异常。 接下来,我们看看标签“源码”和“工具”,这表明讨论可能涉及到...

    day36 11-Hibernate中的事务:当前线程中的session

    然而,需要注意的是,长时间运行的线程或者多线程环境可能会导致Session资源泄漏。因此,应该在适当的时候关闭Session,避免内存占用过高。 在Hibernate的配置中,可以通过`current_session_context_class`属性设置...

    hibernate中session的管理

    在传统的多线程Servlet环境下,如果将Session作为类变量存储,如上述例子中的`TestServlet`,则会面临线程安全问题。由于Servlet容器(如Tomcat)通常只创建一个Servlet实例供所有请求共享,每个线程在执行时可能会...

    SessionFactory.getCurrentSession与openSession的区别

    `Session` 是线程不安全的,因此在多线程环境下,每个线程应该有自己的 `Session` 实例。 现在,我们来对比 `SessionFactory.getCurrentSession()` 和 `Session.openSession()`: 1. **`SessionFactory....

    Hibernate Session释放模式

    通过合理配置,SessionFactory可以在多线程环境下高效地管理Session,如使用一级缓存(Identity Map)和二级缓存(如 Ehcache),提高查询效率。 6. **JTA(Java Transaction API)和JPA(Java Persistence API)...

    Hibernager_Session_Manager_ThreadLocal

    在多线程应用中,每个请求通常对应一个独立的线程,而Session是数据库连接的一个会话,如果在多线程之间共享,可能会导致数据不一致性和并发问题。通过使用ThreadLocal,每个线程都有自己的Session实例,从而避免了...

    Hibernate(session管理)

    SessionFactory是线程安全的,它是一个全局的单例对象,负责管理Session的生命周期。我们可以通过配置文件或者使用Annotation配置来初始化SessionFactory。 2. **打开和关闭Session**:在开始数据库操作前,我们...

    Hibernate用ThreadLocal模式(线程局部变量模式)管理Session

    总的来说,ThreadLocal模式在Hibernate中用于管理Session,解决了多线程环境下Session的共享问题,实现了线程间的隔离,提高了系统的稳定性和效率。通过合理地使用ThreadLocal,开发者可以构建出更高效、更安全的多...

    hibernate更新操作

    SessionFactory是线程安全的,为应用提供与数据库交互的Session实例。 2. **Session的获取与打开**:SessionFactory用于创建Session对象,它是Hibernate的主要工作接口,负责处理数据库事务。在示例中,`...

    SSH笔记-管理Session和批量操作数据库

    - Hibernate的SessionFactory是线程安全的,可以创建多个Session实例,每个实例对应一次数据库会话。 - 使用`Session.createSQLQuery()`或`Session.createQuery()`构建HQL(Hibernate Query Language)或SQL查询,...

    Hibernate体系结构的概要图

    Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务...

    hibernate 简约范例

    由于SessionFactory是线程不安全的,应在多线程环境下使用ThreadLocal变量存储Session。每次操作数据库时,从ThreadLocal中获取Session,操作完毕后关闭Session。 ```java ThreadLocal<Session> threadLocalSession...

    简单易懂的hibernate项目

    SessionFactory是线程安全的,通常在应用启动时创建并整个生命周期内保持。 5. **Session接口**:用于执行数据库操作,如查询、更新、删除等。它是短暂的,每次数据库交互后应关闭。 6. **Transaction管理**:事务...

    课程hibernate的事务和并发.pdf

    在并行控制方面,Hibernate分为三个层次:Configuration、SessionFactory和Session。SessionFactory是线程安全的,适用于多线程共享,通常在应用程序启动时创建。Session则是轻量级、非线程安全的,每个业务进程或...

    JAVA ThreadLocal类深入

    例如,HibernateUtil类中会定义一个ThreadLocal变量来保存SessionFactory创建的Session实例,便于在多线程环境下安全地使用。 ```java public class HibernateUtil { private static final ThreadLocal<Session> ...

    getCurrentSession 与 openSession() 的区别

    2. **Session生命周期**:`openSession()` 创建的Session通常一次性的,操作完成后需要关闭,而`getCurrentSession()` 返回的Session可以跨多个方法调用,直到事务结束。 3. **性能影响**:`getCurrentSession()` ...

Global site tag (gtag.js) - Google Analytics