Hibernate getCurrentSession & openSession
getCurrentSession () ,无论在什么地方调用,都返回的是同一个session。
openSession()重新建立一个新的session
在一个应用程序中,如果DAO 层使用Spring 的hibernate 模板,通过Spring 来控制session 的生命周期,则首选getCurrentSession ()。
1. 如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了, 也就是不用再session.close()了。但是如果使用的是openSession方法创建的session的话, 那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭
2. getCurrentSession的使用可以参见hibernate\hibernate-3\doc\tutorial\src项目
3. 使用SessionFactory.getCurrentSession()需要在hibernate.cfg.xml中如下配置:
* 如果采用jdbc独立引用程序配置如下:
<property name="hibernate.current_session_context_class">thread</property>
* 如果采用了JTA事务配置如下
<property name="hibernate.current_session_context_class">jta</property>
Hibernate代码:
Session session = HibernateUnit.getSessionFactory().getCurrentSession();
session.beginTransaction();
....
session.getTransaction().commit();
getcurrentSession()方法总是会返回“当前的”工作单元。
Session 在第一次被使用的时候,即第一次调用getCurrentSession()的时候,其生命周期就开始。然后她被Hibernate绑定到当前线程。当事物结束的时候,不管是提交还是回滚,Hibernate会自动把Session从当前线程剥离,并且关闭。若在次调用 getCurrentSession(),会得到一个新的Session,并且开始一个新的工作单元。这是Hibernate最广泛的thread- bound model,支持代码灵活分层(事物划分和数据访问代码的分离)。
Session在hibenate3.0以上版本,默认是JTX,通过getCurrentSession()将Session和Transaction进行绑定,Transaction无论是commit, 还是rollback都会关闭session。
通过配置,session和Thread进行绑定,Transaction无论是commit, 还是rollback都会关闭session。
分享到:
相关推荐
标题中的“SessionFactory.getCurrentSession与openSession的区别”是关于Hibernate框架中的两个关键操作,它们都是用于在Hibernate中获取数据库会话的。理解它们的区别对于优化数据访问性能和管理事务至关重要。 ...
在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...
当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...
同时,还探讨了Hibernate框架中getCurrentSession()与openSession()的区别。 首先,要操作数据库中的Clob字段,需要关注的是如何在Java对象与Clob字段之间进行转换。由于Clob字段通常用于存储大量文本数据,如果...
2. **为什么使用getCurrentSession()**:与直接调用`openSession()`创建新的Session相比,`getCurrentSession()`有以下优势: - 它能够自动管理Session的生命周期,比如在请求结束时关闭Session,避免资源泄露。 -...
11. Hibernate中getCurrentSession和openSession的区别是什么? `getCurrentSession`是用于在已有的事务上下文中获取或创建Session,确保与当前事务的一致性。而`openSession`则是直接创建一个新的Session,不考虑...
- 错误2:`java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session` - 解决方案:由于Hibernate4移除了HibernateDaoSupport,需要改写DAO层,直接使用Hibernate...
### Hibernate框架技术总结 #### 一、概述 Hibernate是一个开源的对象关系映射(ORM)框架,它为Java...通过这些内容的学习,开发者可以更好地理解和掌握Hibernate的工作原理及应用场景,提高开发效率和代码质量。
通过以上步骤和细节的介绍,我们对Hibernate 4.3.10版本有了较为全面的理解,包括环境搭建、实体映射、SessionFactory和Session的使用,以及生命周期状态的概念等。这对于开发者来说是非常宝贵的知识点,能够帮助...
8. getCurrentSession()和openSession()的区别: - getCurrentSession()会检查当前线程是否已有Session,若有则返回,若无则创建。 - openSession()方法总是创建一个新的Session。 - getCurrentSession()在事务...
在 Hibernate 中,登录页面通常涉及以下关键组件和概念: 1. **实体类(Entity Class)**: 这是与数据库表相对应的Java类。例如,可以创建一个名为`User`的实体类,包含用户名(username)和密码(password)属性,...
- 获取Session:通过SessionFactory的openSession()或getCurrentSession()获取Session实例。 - 开启事务:在Session上开始一个新的数据库事务。 - 对象操作:执行增删改查操作,如save()、update()、delete()、...
本文详细介绍了 Hibernate 中 Session 的关闭实例解析,包括 getSession() 和 openSession() 的区别、getCurrentSession() 的配置、openSession() 和 getCurrentSession() 的关联,以及 Session 的关闭。希望本文...
在Spring中,我们可以使用`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`方法获取Session实例。 4. **事务管理**:Spring提供了声明式事务管理,只需在方法上添加@Transactional注解,即可...
在Spring中,我们可以使用SessionFactory的openSession()或getCurrentSession()方法获取Session实例。 4. **事务管理**: Spring提供PlatformTransactionManager接口,可以用来管理数据库事务。在Hibernate整合中,...
Hibernate 提供了两种查询方式:HQL(Hibernate Query Language)和Criteria API。HQL是面向对象的查询语言,类似SQL。 ```java String hql = "FROM User WHERE id = :id"; Query<User> query = session....
hibernate 学习笔记: 了解hibernate的基本概念 配置hbm.xml cfg.xml 快速入门案例3: 从domain-xml-数据库表 ...openSession()和getCurrentSession() 线程局部变量模式 transaction事务 在web项目中开发hibernate
描述:本文深入解析了Hibernate框架中事务管理和并发控制的核心概念及其实现机制,基于一份详尽的“hibernate详细解析.pdf”文档,覆盖了非托管环境、JTA环境下的事务处理以及如何在不同场景下确保数据的一致性和...
`openSession()`和`getCurrentSession()`用于获取Session实例,`save()`, `saveOrUpdate()`, `delete()`分别用于对象的持久化操作。`refresh()`刷新对象状态,`clear()`清除Session中的所有对象,`evict()`则用于从...