`

SessionFactory.getCurrentSession与openSession的区别

阅读更多

原来在做jbpm工作流时老是出现session的问题出现异常,算是办法也简单session.close(),原因是我在sevice层openSession而忘记关闭,每写一个方法都必须这样。而采用getCurrentSession的话就不需要了,现总结两者间的区别:

1. 如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了, 也就是不用再session.close()了。但是如果使用的是openSession方法创建的session的话,那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭。
2.  使用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>

2
0
分享到:
评论
1 楼 jianglili 2009-04-06  
我也是这样配置了~但是会报错:
No TransactionManagerLookup specified
请教一下知道这是为什么吗??

我是这样调用的:
Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession();
Transaction ts = session.beginTransaction();
//一些事务处理代码

相关推荐

    新Hibernate SessionFactory().getCurrentSession()猫腻

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

    getCurrentSession 与 openSession() 的区别

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

    OA项目SSH整合框架

    Assert.assertNotNull(sessionFactory.openSession()); } 2,配置声明式事务(使用基于注解的方式) 1,配置 &lt;!-- 配置事务管理器 --&gt; &lt;bean id="transactionManager" class="org.springframework....

    spring_hibernate_annotation的三种实现

    Session session = sessionFactory.getCurrentSession(); session.save(user); } ``` 7. 整合测试: 使用JUnit或者其他的测试框架,编写测试类,通过Spring的`@ContextConfiguration`注解加载配置,然后使用`...

    Spring与Hibernate集成中的session

    - 创建`Session`:`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`(在已配置的事务环境下)。 - 事务开始:`Session.beginTransaction()`。 - 数据操作:如`Session.save()`, `Session....

    Hibernate4Spring3

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

    Hibernate说明文档.rar_ajax_hibernate

    Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); // set user properties... session.save(user); tx.commit(); session.close(); ``` #...

    开始冬眠_Hibernate教程

    Session session = sessionFactory.getCurrentSession(); session.save(stu); } // 其他方法省略 } ``` #### 总结 通过上述内容的学习,我们可以看出Hibernate作为一款强大的ORM框架,极大地简化了数据库...

    hibernate登录页面测试

    Session session = sessionFactory.openSession(); ``` 3. **DAO(Data Access Object)**: DAO设计模式用于封装数据库访问逻辑,确保业务逻辑与数据访问层解耦。我们可以创建一个`UserDAO`接口和实现类,用于处理...

    hibernate学习笔记.

    - **Session**是与数据库交互的主要接口,`sessionFactory.openSession()`会创建一个新的Session,需要手动关闭;`sessionFactory.getCurrentSession()`则会在已有的事务上下文中获取或创建Session,自动管理关闭。...

    ssh中getCurrentSession的使用

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

    HIBERNATE4开发文档,HIBERNATE4的变化

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

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    Session session = sessionFactory.getCurrentSession(); SQLQuery query = session.createSQLQuery("SELECT id, name FROM User WHERE age &gt; :age") .addScalar("id", Hibernate.LONG) .addScalar("name", ...

    详细解释Spring与Hibernate的整合原理

    Session session = sessionFactory.getCurrentSession(); // Hibernate 的所有操作都必须在事务中 Transaction transaction = session.beginTransaction(); Person p = new Person(); p.setName("111111111111111...

    Hibernate3.6(开发必看).pdf

    Session session = sessionFactory.openSession(); ``` 代码展示了如何从配置文件中读取配置信息,构建SessionFactory,再通过SessionFactory来创建Session。 4. ORM映射文件(.hbm.xml)的示例: ```xml &lt;!...

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

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

    Hibernate的框架的总结

    return sessionFactory.openSession(); } } ``` #### 四、连接池配置 - **C3P0 连接池**:Hibernate支持多种连接池,其中C3P0是一种常用的连接池管理器。 - **配置方式**:在`hibernate.cfg.xml`中添加C3P0...

Global site tag (gtag.js) - Google Analytics