在SSH框架的项目中,做数据库操作,报出如下异常:
No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here。
报错原因是在dao操作时,使用了原生的SQL语句查询,之前没有报错是因为一直用的是Hql语句,用criteria或者query对象,用HibernateTemplate操作也不报错。解决方法:
第一:配置spring中的hibernate的sessionFactory的参数:
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">
ehcache.xml
</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
红色部分为新添加的参数。原因是:
当我们用Spring管理hibernate时,会让Spring自动管理事务,这时候我们就会继承HibernateDaoSupport类,并且使用HibernateTemplate对数据库进行操作,为了能让索引文件自动更新,我想使用FullTextSession
所用调用了以下方法:
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
FullTextSession fullTextSession = Search.createFullTextSession(session);
但是getCurrentSession()时就会报错:No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
大概意思是session没有绑定到线程上。
第二,还有一个参数
还看到一个帖子,上面还有一个参数是:
<prop key="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</prop>
具体作用不清楚,待学习。
第三,Session was already closed异常
当我解决了session线程绑定的异常之后,又报出session was already closed这个异常,一查得知session在事物提交的时候已经关闭了。详情如下:(网上抄袭的)
“debug跟到t.commit()代码里,发现是调用的JDBCTransaction实现类的方法. 一番找寻后终于在finally里看到了closeIfRequired方法,很是可疑!名字都起的那么"此地无银三百两". 一番跟踪这后,在transactionContext.managedClose方法里找到了"犯罪现场": close()! 原来已经调用此方法给关掉了!”
所以,对于session关闭之前,做如下判断:
if(session.isOpen()){
session.close();
}
最后,思考。
以上两个异常综合起来,难道用HQL语言,criteria对象进行crud操作都没有真正启用session吗?所有的session.close()方法都没用?session也没有被什么线程调用吗?
待学习。
分享到:
相关推荐
然而,在使用 Hibernate 进行数据库操作时,经常会遇到 "No Hibernate Session bound to thread" 的错误信息。本文将详细介绍该错误的解决方案。 错误原因 "No Hibernate Session bound to thread" 错误信息通常是...
然而,在某些特定场景下,我们可能并不需要频繁地打开和关闭Session,这时“Hibernate-nosession”就显得尤为重要。本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么...
在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...
Hibernate 的架构主要包括 SessionFactory、Session、Transaction 等核心组件,这些组件共同构成了 Hibernate 的工作流程。 - **2.2 实例状态** Hibernate 支持多种实例状态,包括持久化状态、瞬态状态和分离...
hibernate就会抛出: No Hibernate Session bound to thread, and configuration does not allow creation of one here}异常。 在实际的SSH web应用开发中,我们通常用spring来进行事务的管理。我们一般不会在dao层...
4. Hibernate框架错误:文档还包含了“org.hibernate.HibernateException: No Hibernate Session bound to thread”等错误信息,这是Hibernate框架常见的异常,表明在当前线程上没有绑定Hibernate Session。...
在spring+hibernate的框架中定时操作数据库,主要是拿到sessionFactory,不会出现no session 和transaction no-bound等问题,由sessionFactory完成对数据的操作,有些包是没有用的,有兴趣的可以自己删除掉
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. ...
### Hibernate 3.x 参考手册关键知识点解析 #### 一、快速入门与Tomcat集成 **1.1 快速开始使用 Hibernate** - **环境准备:** - 使用 Hibernate 前需确保 Java 环境已安装配置。 - 下载 Hibernate 3.x 版本库...
当遇到`no current session bound to current context`错误时,通常是因为事务管理方式不正确。Hibernate提供了多种会话上下文配置,如`thread`、`jta`等。在这种情况下,推荐使用`thread`配置,确保每个线程都有...
- JNDI-bound SessionFactory:通过 JNDI 获取 SessionFactory。 - 当前会话上下文管理与 JTA:确保事务的一致性。 - JMX 部署:使用 JMX 部署 Hibernate 应用。 #### 五、持久化类 - **简单 POJO 示例**:使用 ...
要开始使用Criteria,你需要在Hibernate的Session中调用`createCriteria()`方法,传入你想查询的实体类的Class对象。例如,如果你要查询Person实体,你会这样做: ```java Criteria c = session.createCriteria...
本案例重点探讨了Spring如何与两种流行的数据访问技术——JDBC(Java Database Connectivity)和Hibernate——相结合,进行事务管理。事务控制是确保数据库操作一致性、完整性的关键,尤其在多步骤操作中,它能防止...
Problem Definitions and Evaluation Criteria for the CEC 2020 Special Session and Competition on Single Objective Bound Constrained Numerical Optimization 这篇文献找了好久。。
在JavaBean中,"Bound属性"是指那些当其值发生改变时,能够自动通知相关监听器和其他依赖组件的属性。这种特性使得JavaBean在Java应用程序和网页设计中(如JSP)特别有用,因为它简化了组件之间的交互。 在JavaBean...
- `between(property, lowerBound, upperBound)`:用于检查属性是否在指定范围内。 - `like(property, pattern)`:用于执行模糊匹配。 通过组合这些条件,可以构建出非常复杂的查询逻辑。例如,查询所有`groupId`为...
本文将深入探讨“Android Service之bound实现”,理解如何通过绑定服务(Bound Service)来创建一个与应用程序组件交互的服务。 首先,我们要了解服务的两种基本类型:Start Service和Bound Service。Start Service...
在这个问题中,开发者遇到了一个常见的错误:“Name jdbc is not bound in this Context”,这通常意味着在Tomcat的环境中,指定的数据源没有被正确地绑定或配置。 要解决这个问题,首先需要在Tomcat的配置文件中...
错误信息: XXXX client has already been bound to another coroutine使用协程客户端时出现以下错误信息:re
"USB-bound分析器"是一款专为USB设备监测和分析设计的工具,主要功能是帮助用户查看和理解系统中连接的USB设备的相关信息。通过这款软件,你可以深入洞察USB设备的工作状态,了解USB协议的交互过程,这对于系统管理...