在项目架构中,主流框架都用了Spring的集大成者。在某些时候,我们需要从spring上下文中取得注册Bean,并操作CRUD。
我们通过实现ApplicationContextAware来获取上下文,取得想要的bean.
在保存时出现 No Hibernate Session bound to thread 错误。
需要在Service或者具体某个方法上加上@Transactional,开启了事务。
参考一下大侠的解释原因是:
getHibernateTemplate().getSessionFactory().getCurrentSession()的意思是得到当前线程 绑定的session,而当前线程绑定的session是通过当前的事务产生的,如果你没有配置事务的话,当前线程threadlocal中就不存在 session,这样就出现no session错误。
而execute的回调方法,看源码HibernateTemplate中写道
Java code
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,代码如下
Java code
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回调方法,就不会出现上述问题。
分享到:
相关推荐
通过添加该注解,我们可以将 Hibernate Session 绑定到当前线程,从而解决 "No Hibernate Session bound to thread" 错误。 例如,在查询操作中,我们可以添加以下注解: @Transactional(propagation=Propagation....
本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么是Hibernate Session。Session是Hibernate中的核心接口,它充当了应用程序和数据库之间的桥梁,负责对象的持久化操作...
在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...
4. Hibernate框架错误:文档还包含了“org.hibernate.HibernateException: No Hibernate Session bound to thread”等错误信息,这是Hibernate框架常见的异常,表明在当前线程上没有绑定Hibernate Session。...
hibernate就会抛出: No Hibernate Session bound to thread, and configuration does not allow creation of one here}异常。 在实际的SSH web应用开发中,我们通常用spring来进行事务的管理。我们一般不会在dao层...
在Spring中,我们可以使用HibernateTemplate或SessionFactoryBean来配置和管理Hibernate。同样,Spring的声明式事务管理也可以应用到Hibernate上,只需将@Transactional注解添加到使用Hibernate的方法上,Spring就会...
当遇到`no current session bound to current context`错误时,通常是因为事务管理方式不正确。Hibernate提供了多种会话上下文配置,如`thread`、`jta`等。在这种情况下,推荐使用`thread`配置,确保每个线程都有...
1. **Spring配置文件问题**:如果在配置Spring的`applicationContext.xml`文件时遇到错误“The prefix "context" for element "context:component-scan" is not bound”,需要在配置文件头部添加对应的命名空间声明...
在spring+hibernate的框架中定时操作数据库,主要是拿到sessionFactory,不会出现no session 和transaction no-bound等问题,由sessionFactory完成对数据的操作,有些包是没有用的,有兴趣的可以自己删除掉
Spring Boot 中的常见错误和解决方法 在使用 Spring Boot 框架进行开发时,经常会遇到各种错误和问题。这些错误可能是由于配置不正确、编码错误或其他原因引起的。在这里,我们将记录一些常见的 Spring Boot 错误和...
"引入mybatis-plus报Invalid bound statement错误问题的解决方法" Mybatis-Plus是一个基于Mybatis的增强工具,旨在简化开发效率。然而,在使用Mybatis-Plus时,可能会遇到各种问题,例如Invalid bound statement...
总之,解决“Name jdbc is not bound in this Context”错误的关键在于正确配置数据源,并在Java代码中使用JNDI查找数据源以获取数据库连接。理解并熟练掌握这些步骤对于开发基于Java Web的应用程序来说至关重要。
### Hibernate使用指南精要 #### 一、简介与入门 **1.1 引言** Hibernate 是一个开源的对象关系...通过这些章节的学习,读者可以建立起坚实的基础,从而能够有效地利用 Hibernate 来解决实际开发中的数据访问问题。
错误信息: XXXX client has already been bound to another coroutine使用协程客户端时出现以下错误信息:re
然而,当遇到"Invalid parameter number: no parameters were bound"错误时,这意味着尝试执行的SQL语句中的占位符参数没有正确地与实际值绑定。 这个问题在某些旧版本的PHP和PDO中被报告为一个bug,特别是...
### Hibernate 3.x 参考手册关键知识点解析 #### 一、快速入门与Tomcat集成 **1.1 快速开始使用 Hibernate** - **环境准备:** - 使用 Hibernate 前需确保 Java 环境已安装配置。 - 下载 Hibernate 3.x 版本库...
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. ...
例如,在知识图谱中,当发现数据矛盾时,该系统可以帮助修复错误,提高知识库的准确性和完整性。在智能对话系统中,它可以处理用户的模糊或矛盾输入,提供更合理的回答。 总之,次协调逻辑推理系统是人工智能领域的...