`
mixer_b
  • 浏览: 115500 次
社区版块
存档分类
最新评论

Hibernate之openSession和getCurrentSession

 
阅读更多

hibernate通过SessionFactory有两种方式获取session: 一种是openSession  一种是getCurrentSession

区别:

     a)openSession创建session时autoClassSessionEnabled参数为false,即在事务结束后不会自动关闭session 需要手动关闭

     b)getCurrentSession创建session时autoCloseSessionEnabled,flushBeforeCompletionEnabled都为true  事务结束后自动关闭session

 

如果使用getCurrentSession获取session时 需要在hibernate.cfg.xml中加入如下配置

本地事务

[html] view plaincopy
  1. <property name="hibernate.current_session_context_class">thread</property>  


全局事务

[html] view plaincopy
  1. <property name="hibernate.current_session_context_class">jta</property>  


不然的话会报如下错误:

[html] view plaincopy
  1. org.hibernate.HibernateException: No CurrentSessionContext configured!  
  2.     at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:620)  
  3.     at com.itmyhome.model.StudentTest.test(StudentTest.java:26)  
  4.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  5.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  6.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  7.     at java.lang.reflect.Method.invoke(Method.java:597)  .........  
分享到:
评论

相关推荐

    新Hibernate SessionFactory().getCurrentSession()猫腻

    当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...

    getCurrentSession 与 openSession() 的区别

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

    SessionFactory.getCurrentSession与openSession的区别

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

    ssh中getCurrentSession的使用

    2. **为什么使用getCurrentSession()**:与直接调用`openSession()`创建新的Session相比,`getCurrentSession()`有以下优势: - 它能够自动管理Session的生命周期,比如在请求结束时关闭Session,避免资源泄露。 -...

    Hibernate存储Clob字段的方式总结

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

    HIBERNATE4开发文档,HIBERNATE4的变化

    - 错误2:`java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session` - 解决方案:由于Hibernate4移除了HibernateDaoSupport,需要改写DAO层,直接使用Hibernate...

    Hibernate的框架的总结

    ### Hibernate框架技术总结 #### 一、概述 Hibernate是一个开源的对象关系映射(ORM)框架,它为Java...通过这些内容的学习,开发者可以更好地理解和掌握Hibernate的工作原理及应用场景,提高开发效率和代码质量。

    hibernate 4.3.10 版本的笔记

    实体映射是Hibernate的核心功能之一。这部分内容主要涉及如何使用XML映射文件和注解的方式来进行实体映射。 **XML映射文件示例:** - **Student.hbm.xml** 文件用于定义`Student`类与数据库表之间的映射关系。 - ...

    2020版Hibernate 12 道.pdf

    11. Hibernate中getCurrentSession和openSession的区别是什么? `getCurrentSession`是用于在已有的事务上下文中获取或创建Session,确保与当前事务的一致性。而`openSession`则是直接创建一个新的Session,不考虑...

    hibernate 学习笔记

    hibernate 学习笔记: 了解hibernate的基本概念 配置hbm.xml cfg.xml 快速入门案例3: 从domain-xml-数据库表 ...openSession()和getCurrentSession() 线程局部变量模式 transaction事务 在web项目中开发hibernate

    Spring视频教程(3)

    编程式事务处理是手动管理事务边界,而OpenSession/GetCurrentSession模式则是在操作数据库时自动开启和关闭Session。这两者在事务管理和性能上有不同的考量。学习者将了解到何时选择哪种方式,以及它们在Spring中...

    hibernate.jar包

    - 获取Session:通过SessionFactory的openSession()或getCurrentSession()获取Session实例。 - 开启事务:在Session上开始一个新的数据库事务。 - 对象操作:执行增删改查操作,如save()、update()、delete()、...

    hibernate关于session的关闭实例解析

    本文详细介绍了 Hibernate 中 Session 的关闭实例解析,包括 getSession() 和 openSession() 的区别、getCurrentSession() 的配置、openSession() 和 getCurrentSession() 的关联,以及 Session 的关闭。希望本文...

    hibernate登录页面测试

    在 Hibernate 中,登录页面通常涉及以下关键组件和概念: 1. **实体类(Entity Class)**: 这是与数据库表相对应的Java类。例如,可以创建一个名为`User`的实体类,包含用户名(username)和密码(password)属性,...

    SSH框架部分常见面试题.pdf

    openSession 和 getCurrentSession 是 Hibernate 中的两个会话方法,openSession 用于创建新的会话,getCurrentSession 用于获取当前会话。 saveOrUpdate() 和 merge() saveOrUpdate() 和 merge() 是 Hibernate 中...

    hibernate-spring整合

    在Spring中,我们可以使用SessionFactory的openSession()或getCurrentSession()方法获取Session实例。 4. **事务管理**: Spring提供PlatformTransactionManager接口,可以用来管理数据库事务。在Hibernate整合中,...

    [尚硅谷]_佟刚_Hibernate面试题分析

    8. getCurrentSession()和openSession()的区别: - getCurrentSession()会检查当前线程是否已有Session,若有则返回,若无则创建。 - openSession()方法总是创建一个新的Session。 - getCurrentSession()在事务...

    Hibernate4Spring3

    在Spring中,我们可以使用`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`方法获取Session实例。 4. **事务管理**:Spring提供了声明式事务管理,只需在方法上添加@Transactional注解,即可...

    hibernate的事务核并发

    描述:本文深入解析了Hibernate框架中事务管理和并发控制的核心概念及其实现机制,基于一份详尽的“hibernate详细解析.pdf”文档,覆盖了非托管环境、JTA环境下的事务处理以及如何在不同场景下确保数据的一致性和...

Global site tag (gtag.js) - Google Analytics