`

怪异的 No Hibernate Session bound to Thread !异常

阅读更多

java .lang .IllegalStateException: No Hibernate Session bound to thread , and configuration does not allow creation of non-transactional one here
at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java :350)
at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java :200)
at com.sea.user.dao.BaseDAO.getSession(BaseDAO.java :23)
at com.sea.user.dao.impl.UserDAO.saveUser(UserDAO.java :16)
at com.sea.user.service.impl.UserService.saveUser(UserService.java :14)
at com.sea.user.action.UserAction.register(UserAction.java :48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java :39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java :25)

====================

意思是说你没有事务,无法产生Session与当前线程绑定,这通常是getHibernateTemplate() getSession()产生的问题,does not allow creation of non-transactional one here 不允许创建非事务,看过一些别人的见解,是说这里的Session必须和事务关联才能产生,(然后绑定到线程,进而在事务处理过程中Session只是唯 一的,这是我想的,保证在一次操作中是事务性的,Session(即一个连接唯一 )才可能,)而用HibernateCallback()就不会出现问题,然而很多人可能直接在Service里想得到 Session.

==================

reference to link:

https://forums.hibernate.org/viewtopic.php?p=2400339&sid=981dbe2a38a5e3a8b031bdbb8edde389

http://www.iteye.com/problems/33765

============================

 Spring的 getHibernateTemplate().getSessionFactory().getCurrentSession()的意思是得到当前线程 绑定的session,而当前线程绑定的session是通过当前的事务产生的,如果没有配置事务的话,当前线程threadlocal中就不存在 session,这样就出现no session错误。

而execute的回调方法,看源码HibernateTemplate中写道

public Object execute(HibernateCallback action, boolean exposeNativeSession) throws DataAccessException {
    Assert.notNull(action, "Callback object must not be null");

    Session session = getSession();
    boolean existingTransaction = (!isAlwaysUseNewSession() &&
        (!isAllowCreate() || SessionFactoryUtils.isSessionTransactional(session, getSessionFactory())));


其中getSession,代码如下

protected Session getSession() {
    if (isAlwaysUseNewSession()) {
        return SessionFactoryUtils.getNewSession(getSessionFactory(), getEntityInterceptor());
    }
    else if (isAllowCreate()) {
        return SessionFactoryUtils.getSession(
        getSessionFactory(), getEntityInterceptor(), getJdbcExceptionTranslator());
    }
    else {
        try {
            return getSessionFactory().getCurrentSession();
        }
        catch (HibernateException ex) {
            throw new DataAccessResourceFailureException("Could not obtain current Hibernate Session", ex);
        }
    }


        其中默认private boolean alwaysUseNewSession = false,所以代码会走到else if (isAllowCreate())
注 意这里:else if (isAllowCreate()),其中在HibernateTemplate类中默认private boolean allowCreate = true;其实通过函数名字就很清楚。意思说如果当前线程中的session不存在的话,是否允许创建,而默认是允许的,接下来是创建当前线程中的 session的代码,所以在没有事务的状态下,用execute回调方法,就不会出现上述问题。

分享到:
评论

相关推荐

    org.hibernate.HibernateException: No Hibernate Session bound to thread

    然而,在使用 Hibernate 进行数据库操作时,经常会遇到 "No Hibernate Session bound to thread" 的错误信息。本文将详细介绍该错误的解决方案。 错误原因 "No Hibernate Session bound to thread" 错误信息通常是...

    Hibernate-nosession

    然而,在某些特定场景下,我们可能并不需要频繁地打开和关闭Session,这时“Hibernate-nosession”就显得尤为重要。本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么...

    Hibernate Session释放模式

    在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...

    OA系统整体设计及约定、搭建环境.rar_OA系统及配置_OA系统整体设计及约定、搭建环境_creation

    hibernate就会抛出: No Hibernate Session bound to thread, and configuration does not allow creation of one here}异常。 在实际的SSH web应用开发中,我们通常用spring来进行事务的管理。我们一般不会在dao层...

    JAVA错误文档.pdf

    4. Hibernate框架错误:文档还包含了“org.hibernate.HibernateException: No Hibernate Session bound to thread”等错误信息,这是Hibernate框架常见的异常,表明在当前线程上没有绑定Hibernate Session。...

    spring分别与jdbc和hibernate结合的事务控制--案例

    本案例重点探讨了Spring如何与两种流行的数据访问技术——JDBC(Java Database Connectivity)和Hibernate——相结合,进行事务管理。事务控制是确保数据库操作一致性、完整性的关键,尤其在多步骤操作中,它能防止...

    使用Hibernate一些常见错误解决办法

    当遇到`no current session bound to current context`错误时,通常是因为事务管理方式不正确。Hibernate提供了多种会话上下文配置,如`thread`、`jta`等。在这种情况下,推荐使用`thread`配置,确保每个线程都有...

    PDO版本问题 Invalid parameter number: no parameters were bound

    发现在客户的某个PHP版本下,执行某类操作的时候,总是会报如下错误 Invalid parameter number: no parameters were bound,经google,发现是php版本过低导致

    hibernate_reference使用指南全

    Hibernate 的架构主要包括 SessionFactory、Session、Transaction 等核心组件,这些组件共同构成了 Hibernate 的工作流程。 - **2.2 实例状态** Hibernate 支持多种实例状态,包括持久化状态、瞬态状态和分离...

    swoole#swoole-wiki#3.13.4 - 错误信息: XXXX client has already been b

    错误信息: XXXX client has already been bound to another coroutine使用协程客户端时出现以下错误信息:re

    Hibernate Reference Documentation3.1

    1. Introduction to Hibernate 1.1. Preface 1.2. Part 1 - The first Hibernate Application 1.2.1. The first class 1.2.2. The mapping file 1.2.3. Hibernate configuration 1.2.4. Building with Ant 1.2.5. ...

    Spring+hibernate+quartz 定时操作数据库

    在spring+hibernate的框架中定时操作数据库,主要是拿到sessionFactory,不会出现no session 和transaction no-bound等问题,由sessionFactory完成对数据的操作,有些包是没有用的,有兴趣的可以自己删除掉

    Hibernate 3.x 参考手册

    ### Hibernate 3.x 参考手册关键知识点解析 #### 一、快速入门与Tomcat集成 **1.1 快速开始使用 Hibernate** - **环境准备:** - 使用 Hibernate 前需确保 Java 环境已安装配置。 - 下载 Hibernate 3.x 版本库...

    数据池连接Name jdbc is not bound in this Context解决方案

    在这个问题中,开发者遇到了一个常见的错误:“Name jdbc is not bound in this Context”,这通常意味着在Tomcat的环境中,指定的数据源没有被正确地绑定或配置。 要解决这个问题,首先需要在Tomcat的配置文件中...

    Android Service之bound实现

    本文将深入探讨“Android Service之bound实现”,理解如何通过绑定服务(Bound Service)来创建一个与应用程序组件交互的服务。 首先,我们要了解服务的两种基本类型:Start Service和Bound Service。Start Service...

    JavaBean - Bound属性

    在JavaBean中,"Bound属性"是指那些当其值发生改变时,能够自动通知相关监听器和其他依赖组件的属性。这种特性使得JavaBean在Java应用程序和网页设计中(如JSP)特别有用,因为它简化了组件之间的交互。 在JavaBean...

    usb-bound分析器

    "USB-bound分析器"是一款专为USB设备监测和分析设计的工具,主要功能是帮助用户查看和理解系统中连接的USB设备的相关信息。通过这款软件,你可以深入洞察USB设备的工作状态,了解USB协议的交互过程,这对于系统管理...

    Tomcat启动时报错:Name salesDataSource is not bound in this Context

    Name salesDataSource is not bound in this Context,连接池的问题

    On a search problem related to branch-and-bound procedures.pdf

    On a search problem related to branch-and-bound procedures.pdfOn a search problem related to branch-and-bound procedures.pdfOn a search problem related to branch-and-bound procedures.pdfOn a search ...

Global site tag (gtag.js) - Google Analytics