`
SSailYang
  • 浏览: 312660 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 的 getCurrentSession 简析

阅读更多

SessionFactory.getCurrentSession() 是 Hibernate 应用获取 Session 的常用方法。在调用该方法时,Hibernate 会从 interface CurrentSessionContext 获取当前的 Session,这是Hibernate 在不同组件中传递 Session 的方法。

CurrentSessionContext 有三个实现,分别是 ThreadLocalSessionContext、JTASessionContext 和 ManagedSessionContext。ThreadLocalSessionContext 将 Session 与当前线程绑定,是使用较多的一种方案;JTASessionContext 将 Session 与 JTA 事务绑定,在 JTA 环境中使用;ManagedSessionContext 使应用可以通过 bind() 和 unbind() 方法控制 Session 的绑定,主要在有 Conversation 的应用中使用(如果使用 ManagedSessionContext,开发人员要做的事情还是很多的)。CurrentSessionContext 实现的选择可以通过 hibernate.current_session_context_class 来配置。

另一种更常见的创建 Session 的方法是 openSession()。openSession() 与 getCurrentSession() 有何不同和关联呢?在 SessionFactory 启动的时候,Hibernate 会根据配置创建相应的 CurrentSessionContext,在 getCurrentSession() 被调用的时候,实际被执行的方法是 CurrentSessionContext.currentSession() 。在 currentSession() 执行时,如果当前 Session 为空,currentSession 会调用 SessionFactory 的 openSession。所以 getCurrentSession() 对于 Java EE 来说是更好的获取 Session 的方法。

再说 ManagedSessionContext,它提供了更灵活的绑定 Session 的方式,但是使用起来去不简单。在 Hibernate 的 CaveatEmptor 实例中有关于使用 ManagedSessionContext 的例子,但更好的选择是使用 Seam Framework。

分享到:
评论

相关推荐

    新Hibernate SessionFactory().getCurrentSession()猫腻

    标题提到的"新Hibernate SessionFactory().getCurrentSession()猫腻"揭示了一个常见的使用误区或者说是陷阱,即不正确地使用SessionFactory的getCurrentSession()方法。这篇文章可能探讨了这个方法在实际应用中的...

    ssh中getCurrentSession的使用

    在描述中提到的"ssh中getCurrentSession的使用",实际上可能是指在SSH集成框架中使用Hibernate框架时,获取数据库会话(Session)的方法。 在Hibernate中,`getCurrentSession()`是SessionFactory类的一个方法,它...

    Hibernate存储Clob字段的方式总结

    同时,还探讨了Hibernate框架中getCurrentSession()与openSession()的区别。 首先,要操作数据库中的Clob字段,需要关注的是如何在Java对象与Clob字段之间进行转换。由于Clob字段通常用于存储大量文本数据,如果...

    getCurrentSession 与 openSession() 的区别

    在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...

    SessionFactory.getCurrentSession与openSession的区别

    理解 `SessionFactory.getCurrentSession()` 和 `Session.openSession()` 的区别对于优化和正确使用Hibernate至关重要。 首先,`SessionFactory` 是Hibernate中的一个接口,它是一个全局的、线程安全的工厂类,用于...

    Hibernate源代码分析

    public org.hibernate.classic.Session getCurrentSession() throws HibernateException { if (currentSessionContext == null) { throw new HibernateException("No CurrentSessionContext configured!"); } ...

    struts+hibernate 项目

    查询通常借助Criteria、HQL或SQL语句,通过SessionFactory的getCurrentSession()获取的Session执行。 项目的具体实现细节,例如业务逻辑处理、数据访问对象(DAO)的设计、异常处理以及安全性考虑,都需要参考项目...

    hibernate执行原生sql语句

    Session session = HibernateSessionFactory.getCurrentSession(); SQLQuery query = session.createSQLQuery("select * from cats"); List<Cat> cats = query.addEntity(Cat.class).list(); ``` 在上面的代码中,...

    springboot集成hibernate

    在本文中,我们将深入探讨如何将Spring Boot框架与Hibernate ORM集成,特别是在不使用JPA(Java Persistence API)的情况下。Spring Boot以其便捷的自动配置和简化Java应用开发而广受欢迎,而Hibernate作为Java领域...

    Spring+Hibernate实现)Hibernate公用类

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别在应用层管理和数据持久化方面发挥着关键作用。本文将详细解析如何利用Spring和Hibernate来实现一个通用的DAO(Data Access Object)层,以提高代码...

    hibernate与spring整合demo

    Session session = sessionFactory.getCurrentSession(); session.save(user); return user; } } ``` 六、实际应用 在实际开发中,这种整合方式广泛应用于企业级应用,如CRUD操作、复杂查询、批量数据处理等...

    Hibernate更新某些字段

    Session session = HibernateUitl.getSessionFactory().getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher) session.get(Teacher.class, 3); t.setName("yangtb2"); session.update(t); ...

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...

    Hibernate源代码分析(一)

    public org.hibernate.classic.Session getCurrentSession() throws HibernateException { if ( currentSessionContext == null ) { throw new HibernateException( "No CurrentSessionContext configured!" ); }...

    Spring与hibernate 整合 简单示例

    在Java开发领域,Spring框架和Hibernate是两个非常重要的开源库,它们分别负责应用程序的依赖管理和对象关系映射(ORM)。Spring作为一个全面的轻量级应用框架,提供了事务管理、AOP(面向切面编程)、IoC(控制反转...

    hibernate 4.3.10 版本的笔记

    - `getCurrentSession()`方法则会在当前线程中获取一个Session,如果当前线程没有Session,则会自动创建一个新的Session。这种方式适用于需要跨多个方法调用的事务管理。 #### 四、Hibernate生命周期状态 - **瞬...

    Hibernate的框架的总结

    - `getCurrentSession()`:获取当前线程绑定的Session,适用于单线程环境。 - 示例代码: ```java public class HibernateUtils { private static SessionFactory sessionFactory; static { Configuration ...

Global site tag (gtag.js) - Google Analytics