gpt4 book ai didi

hibernate - Spring 和 hibernate : no session bound to the thread

转载 作者:行者123 更新时间:2023-12-02 23:43:56 25 4
gpt4 key购买 nike

尝试让 Spring 的事务管理正常工作,但结果并没有如我所愿。

在请求任何需要我的数据库的内容时出现异常:

DEBUG: org.springframework.orm.hibernate3.SessionFactoryUtils - Opening Hibernate Session
DEBUG: org.springframework.orm.hibernate3.SessionFactoryUtils - Opening Hibernate Session
DEBUG: org.hibernate.impl.SessionImpl - opened session at timestamp: 12897642913
DEBUG: org.springframework.orm.hibernate3.SessionFactoryUtils - Closing Hibernate Session
DEBUG: org.springframework.orm.hibernate3.SessionFactoryUtils - Closing Hibernate Session
14-nov-2010 20:51:31 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet mvc-dispatcher threw exception
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

我已经将我的属性移至 Spring 上下文中,看看情况是否有所改善,但没有。我的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

<bean id="myDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/kidscalcula" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>

<bean class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
id="sessionFactory">
<property name="dataSource" ref="myDataSource" />
<property name="mappingResources">
<list>
<value>be/howest/kidscalcula/model/Foto.hbm.xml</value>
<value>be/howest/kidscalcula/model/Kindleerplanonderdeel.hbm.xml
</value>
<value>be/howest/kidscalcula/model/Klas.hbm.xml</value>
<value>be/howest/kidscalcula/model/Leerkracht.hbm.xml</value>
<value>be/howest/kidscalcula/model/Leerling.hbm.xml</value>
<value>be/howest/kidscalcula/model/Leerplan.hbm.xml</value>
<value>be/howest/kidscalcula/model/LeerplanOefenreeks.hbm.xml
</value>
<value>be/howest/kidscalcula/model/Leerplanonderdeel.hbm.xml</value>
<value>be/howest/kidscalcula/model/Niveau.hbm.xml</value>
<value>be/howest/kidscalcula/model/Oefenreeks.hbm.xml</value>
<value>be/howest/kidscalcula/model/Overgangsregel.hbm.xml</value>
<value>be/howest/kidscalcula/model/Rapport.hbm.xml</value>
<value>be/howest/kidscalcula/model/RapportLeerplanonderdeel.hbm.xml
</value>
<value>be/howest/kidscalcula/model/Schooljaar.hbm.xml</value>
<value>be/howest/kidscalcula/model/Subonderdeel.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.connection.pool_size">3</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.use_sql_comments">true</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
</props>
</property>
</bean>


<!-- Transaction manager for a single Hibernate SessionFactory (alternative
to JTA) -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<tx:annotation-driven />
</beans>

我只是将我的 org.hibernate.SessionFactory 注入(inject)到我的 DAO 中,并在我的方法或类上使用 @Transactional 注释。

@Repository
public class LeerlingDAOimpl implements LeerlingDAO {
@Autowired
public LeerlingDAOimpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

有人知道我忘记了什么、配置错误了吗?基本思想是,通常使用此配置,只要在我的服务层中调用事务方法,就会打开一个 session 。这还允许我在同一事务方法中加载惰性集合。但由于某种原因,它甚至找不到线程。

最佳答案

由于您的配置看起来不错,有几个可能的原因:

  • 您调用@Transactional使用 new 创建的对象上的方法(即不是从Spring获得的)

  • 您调用@Transactional来自同一对象的另一个方法的方法(在这种情况下,不应用事务方面,因为它是基于代理的)

  • 您的对象 @Transactional方法在 <tx:annotation-driven> 的上下文中声明无效(例如,您的 @Transactional 对象在 ...-servlet.xml 中声明,而 <tx:annotation-driven> 仅在 applicationContext.xml 中声明)

关于hibernate - Spring 和 hibernate : no session bound to the thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com