首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我收到HibernateException"No Hibernate Session绑定到线程,配置不允许在这里创建非事务性的"

首先,我们需要了解HibernateException是什么。HibernateException是Hibernate框架中的一个异常类,它表示在Hibernate操作过程中出现了错误。这个错误通常是由于配置不正确或者数据库操作出现问题导致的。

在这个问题中,我们可以看到错误信息是"No Hibernate Session绑定到线程,配置不允许在这里创建非事务性的"。这个错误表示在当前线程中没有绑定Hibernate Session,因此无法执行非事务性的操作。

要解决这个问题,我们需要确保在执行Hibernate操作之前,已经将Hibernate Session绑定到当前线程。这可以通过使用Spring框架中的HibernateTransactionManager来实现。HibernateTransactionManager可以自动管理Hibernate Session的生命周期和事务,确保在每个线程中只有一个Hibernate Session。

以下是一个使用HibernateTransactionManager的示例配置:

代码语言:xml
复制
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <!-- 配置Hibernate SessionFactory -->
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>

在配置了HibernateTransactionManager之后,我们需要在Spring中使用@Transactional注解来标记需要进行事务管理的方法。这样,HibernateTransactionManager就会自动将Hibernate Session绑定到当前线程,并在方法执行完毕后释放Hibernate Session。

以下是一个使用@Transactional注解的示例:

代码语言:java
复制
@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    @Transactional
    public void saveUser(User user) {
        userDao.save(user);
    }
}

在这个示例中,saveUser方法被标记为@Transactional,表示这个方法需要进行事务管理。当这个方法被调用时,HibernateTransactionManager会自动将Hibernate Session绑定到当前线程,并在方法执行完毕后释放Hibernate Session。这样,我们就可以避免出现"No Hibernate Session绑定到线程"的错误。

总之,要解决"No Hibernate Session绑定到线程"的错误,我们需要使用Spring框架中的HibernateTransactionManager来自动管理Hibernate Session的生命周期和事务,并使用@Transactional注解标记需要进行事务管理的方法。这样,我们就可以确保在执行Hibernate操作之前,已经将Hibernate Session绑定到当前线程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Hibernate学习---Configuration,Session,SessionFactory Configuration:SessionFactory:Session

所以我们可以得出一个结论:如果你采用以下段代码来加载配置文件那么你配置文件名字必须叫作hibernate.config.xml Configuration config = new Configuration...这里我们只介绍这些,所以对于Configuration我们仅需要知道它是用来加载配置文件即可,以后具体分析,现在我们先将hibernate基本原理讲明白就好。...,所以Session是多例,它包含了许多final变量,对同一个用户可能会产生多个事务,若多事务同时对Session同一个变量进行访问就会引起并发问题从而导致线程不安全。...Session对象是由ThreadLocal变量存储(ThreadLocal在线程文章里面有介绍),它底层是一个Map,key就为线程名字,所以用这个方法创建Session对象是线程唯一...它创建Session对象时候会进行判断,判断线程是是否已经存在session,如果不存在便进行创建

58560

javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之二 基础Hibernate框架搭建篇

将这些包放到项目的lib文件夹下,下一步,就开始创建Hibernate.cfg.xml   Hibernate.cfg.xml 是Hibernate配置文件,和struts.xml意思有点像。...在Hibernate.cfg.xml里面我们会配置数据库信息,连接数据库配置,以及数据库中表。   首先在src目录下新建一个xml文件,在里面声明 <?...而Hibernate SessionFacroty 接口负责初始化Hibernate ,充当数据储存源代理,并负责创建Session对象,因此要创建一个Session必须要构建一个SessionFactory...Hibernate.cfg.xml,生成SessionFactory 工厂,通过工程获取Session,并将Session放到线程中,定义了Session获取和关闭方法,getSession() 和...代码可以在这里下载,  也可以在GitHub上下载 https://github.com/SilentCC/SSHTest

63990
  • asp中session使用方法

    大家好,又见面了,是你们朋友全栈君。 Session是什么呢?简单来说就是服务器给客户端一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上网站。...需要定义吗?实际上,这个Session对象是具有ASP解释能力 WWW服务器内建对象。也就是说ASP系统中已经给你定义好了这个对象,你只需要使用就行了。...这里所谓透明是指,Session在读取,创建和删除影射实体对象实 例时,这一系列操作将被转换为对数据库表中数据增加,修改,查询和删除操作。   ...Session有以下特点   1,不是线程安全,应该避免多个线程共享同一个Session实例   2,Session实例是轻量级,所谓轻量级:是指他创建和删除不需要消耗太多资源   ...:更新一个对象数据库中,后面在详细介绍   public void delete (Object object)throws HibernateException:从数据库中删除和参数指定对象对应记录

    1.4K10

    ssh搭建开发环境

    公司一直不是ssh零配置框架,每次写action都要在applicationcontext和struts里面配置,好麻烦,最近有空,写了一个ssh零配置框架 这里写了一个小项目,以用户权限管理为例...下载是最近struts2.3.8 asm-3.3.jar  --ASM字节码库 ,使用“cglib”则必要 aopalliance-1.0.jar  --这个包为AOP提供了最普通和通用接口 commons-fileupload...http://127.0.0.1:8686/config-browser/actionNames.action查看系统所有已经存在action,配置不正确就可以在这里看出来; 2.添加Hibernate....jar 二、添加配置文件 在struts包下struts\src\apps\blank\src\main\resources提供了空白struts.xml文件,把它复制项目的src下 web.xml...-- hibernate 懒加载问题过滤 ,可以不配置 --> hibernate Session 过滤器 <filter-name

    2.1K111

    hibernate官方新手教程 (转载)

    它也将把全部Java源码文件,比如配置Hibernate映射文件,复制目标文件夹下。...一个Session代表一个单线程单元操作,SessionFactory则是一个线程安全全局对象,仅仅须要创建一次。...注意当你把Hibernate部署在一个J2EE应用server上时候,这个类不是必须: 一个Session会自己主动绑定当前JTA事物上,你能够通过JNDI来查找SessionFactory。...假设你宁可自己处理数据库事务(比如,调用session.connection.commit()),通过直接和无管理JDBC,这样将把代码绑定一个特定部署环境中去。...原因是hbm2ddl.auto 打开了一个Hibernate配置选项:这使得Hibernate会在每次执行时候又一次创建数据库。通过从配置里删除这个选项来禁止它。

    1K20

    【框架】构架知识点详解入门与测试实例

    --表明以下配置是针对session-factory配置,SessionFactory是Hibernate一个类, 这个类主要负责保存HIbernate配置信息,以及对Session操作...Session不是线程安全,它代表与数据库之间一次操作。 Session是持久层操作基础,相当于JDBC中Connection。...然而在Hibernate中,实例化Session是一个轻量级类,创建和销毁它都不会占用很多资源。 Session通过SessionFactory打开,在所有的工作完成后,需要关闭。...但如果在程序中,不断地创建以及销毁Session对象,则会给系统带来不良影响。所以有时需要考虑session管理合理创建合理销毁。...> t = new ThreadLocal(); static{ try { /*创建一个配置对象,读取配置文件*/

    42120

    JPAHibernate问题汇总

    配置下懒加载相关东西: 1 spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true 进行该配置后,可以在session关闭时也能另外开启一个新...因为对懒加载异常发生有些好奇,所以看了下hibernate源码,这里简单分析下,另外是两个源码包如下: 1 2 spring-orm-5.1.5.RELEASE.jar hibernate-core...hibernate配置,所以在hibernate中,这个配置应该是hibernate.enable_lazy_load_no_trans=true。...: cannot simultaneously fetch multiple bags,该异常由Hibernate引发,当一个实体中定义了两个及两个以上懒加载集合时,即fetch = FetchType.EAGER...使用@IndexColumn,该注解允许你指明存放索引值字段,目的跟Set容器不允许重复元素道理一样。但是该注解以废弃,官方推荐使用是JPA规范@OrderColumn。

    2.5K20

    SSH框架之旅-hibernate(2)

    2.hibernate 一级缓存使用范围就是 session 范围,是从 session 创建 session 关闭。 3.hibernate 一级缓存,存储数据必须是持久化数据。...可以使用 ThreadLocal 将业务层获取 Session 绑定当前线程,然后在 DAO 中获取 Session 时都从当前线程中获取。...,可选值有:1. tread,Session 对象生命周期与本地线程绑定;2. jta,Session 对象生命周期与 JTA 事务绑定;managed,hibernate 委托程序来管理 Session...,并且在 hibernate 中提供了 getCurrentSession()方法来创建一个 Session 和本地线程 TreadLocal 绑定方法。...(); } hibernate 提供这个与本地线程绑定 Session 可以不用关闭,当线程执行结束后,就会自动关闭了。

    92130

    初识Hibernate之环境搭建

    关于Hibernate基本介绍就简单介绍这,对于该框架更深层次理解需要实践去感悟,下面我们介绍搭建Hibernate运行环境几个基本配置文件。...它们分别是: 创建configuration对象 通过configuration对象创建sessionFactory实例 通过sessionfactory创建session实例 通过session对象创建...hibernate.cfg.xml"); return this; } 当然,如果我们想创建由我们自己随意命名配置文件的话,在这里只需要通过参数传给configure方法即可。...整个程序中只能有一个对象,因此也是线程安全。...//通过SessionFactory创建session对象 Session session = sf.openSession(); session对象代表着与数据库一次连接,它底层封装是jdbc,我们通过它来操作我们数据表

    80350

    IDEA 下新建 Hibernate 项目

    面向对象概念中类对应着面向关系概念中表,对象对应着表行,属性对应着表列(字段) IDEA 下 Hibernate 开发步骤 创建 Hibernate 项目 ?...在数据库下创建好对应数据表 IDEA 下连接对应数据库 ? ? IDEA 下反向生成实体类和对象-关系映射文件(*.hbm.xml) ? ?...完善 hibernate.cfg.xml 文件 ? 如上所示为 IDEA 下自动生成实体类以及配置文件,我们需要在配置文件中加入其他配置,如下(hibernate.cfg.xml) <?...对象,相当于 JDBC 中 Connection 对象 public static Session getSession() throws HibernateException {...在这里对数据库进行增、删、改、查操作 * */ // 提交事务 transaction.commit(); // 关闭 Session 以及

    92420

    Hibernate面试题大全

    读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sesssion 创建事务Transation 持久化操作 提交事务 关闭Session 关闭SesstionFactory...受Session管理 当对对象属性进行更改时候,会反映数据库中!...,或创建持久化实例,最后返回该持久实例 用户给出这个对象没有被关联session上,它依旧是脱管 详情可参考: http://cp3.iteye.com/blog/786019 persist...区别 简述hibernate中getCurrentSession和openSession区别 1、getCurrentSession会绑定当前线程,而openSession不会,因为我们把hibernate...交给我们spring来管理之后,我们是有事务配置,这个有事务线程就会绑定当前工厂里面的每一个session,而openSession是创建一个新session

    2K50

    深入JDK源码之ThreadLocal类

    在利用Hibernate开发DAO模块时,我们和Session打的交道最多,所以如何合理管理Session,避免Session频繁创建和销毁,对于提高系统性能来说是非常重要。...一般常用Hibernate工厂类,都会通过ThreadLocal来保存线程session,这样我们在同一个线程处理,工厂类getSession()方法,即可以多次获取同一个Session进行操作...() throws HibernateException { //获取线程局部变量,并强制转换为Session类型 Session s = (Session) session.get...session = new ThreadLocal()”所创建对象session能强制转换为Hibernate Session对象原因。...或者可以自己定义一个静态map,将当前thread作为key,创建session作为值,putmap中,应该也行,这也是一般人想法,但事实上,ThreadLocal实现刚好相反,它是在每个线程中有一个

    70950

    JavaWe 架构

    对于线程安全理解,以及如何在自己程序中避免多线程造成不一致问题等。 I/O。...Figure 1 Spring体系架构   Spring核心主要有三点: IoC:反转控制。   反转控制就是指将控制权由类内部抽离容器,由容器类实例化及动作进行配置管理。...对象不自行创建或管理它们依赖关系,依赖关系被自动注入需要它们对象中。通过参数和配置能够体会出“注入”这个词在这里有多形象。依赖注入最大好处就是松耦合。...不需要再类内部去和特定类进行绑定,而是将一些依赖关系以参数形式注入类内部。...Hibernate工作流程:首先通过configuration对象读取配置文件;解析映射信息,创建StandardSessionFactory;调用openSession打开session创建事务transaction

    43120
    领券