解决方案 »

  1.   

    你这是一个常见的异常。
    配置一个openSessionInViewFilter吧。
    <filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    <init-param>
    </filter>……
      

  2.   

    hibernate的配置加上这一句试试
    <prop key="hibernate.current_session_context_class">thread</prop>
      

  3.   

    getcurrentsession能够获取到session了。谢谢,但事务还是没自动提交,请问知道咋回事么????
      

  4.   

    看你数据库是mysql,看你下的数据库是否是innodB引擎,不是这个的话,就不支持自动提交事务。
      

  5.   

    getcurrentsession能够获取到session了。谢谢,但事务还是没自动提交,请问知道咋回事么????2楼的那句话加了吗?那是必须要的,因为它和线程绑定的
      

  6.   

    我查了下,应该就是innodB引擎,我在dataSource 处添加了这句,事务还是不能自动提交。也没做。应该是放缓存了<property name="defaultAutoCommit" value="true"/>
      

  7.   

    查看你的数据库,看看是什么引擎啊。show create database xxx
      

  8.   

    getcurrentsession能够获取到session了。谢谢,但事务还是没自动提交,请问知道咋回事么????2楼的那句话加了吗?那是必须要的,因为它和线程绑定的二楼那句加于不叫效果一样。
    我在把二楼的换成:
    <prop key="hibernate.current_session_context_class">
    org.springframework.orm.hibernate4.SpringSessionContext</prop>
    一样没有任何效果。事务依然没自动提交????没错误抛出
      

  9.   

    什么叫加不加效果都一样。请问你加的是什么?是
    <filter>
        <filter-name>openSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>openSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>是这个吗?
      

  10.   


    我运行了你这句sql。好像没什么引擎信息。
      

  11.   

    show create table xxx
      

  12.   

    getcurrentsession能够获取到session了。谢谢,但事务还是没自动提交,请问知道咋回事么????2楼的那句话加了吗?那是必须要的,因为它和线程绑定的二楼那句加于不叫效果一样。
    我在把二楼的换成:
    <prop key="hibernate.current_session_context_class">
    org.springframework.orm.hibernate4.SpringSessionContext</prop>
    一样没有任何效果。事务依然没自动提交????没错误抛出
    你现在要解决2个问题:
    1、使用getCurrentSession必须和线程绑定(处理现在的异常)
    2、实现事务自动提交(处理现在问题用),添加<property name="defaultAutoCommit"><value>true</value></property>
      

  13.   

    这里看过了吗
    http://www.verydemo.com/demo_c143_i3007.html
      

  14.   

    getcurrentsession能够获取到session了。谢谢,但事务还是没自动提交,请问知道咋回事么????2楼的那句话加了吗?那是必须要的,因为它和线程绑定的二楼那句加于不叫效果一样。
    我在把二楼的换成:
    <prop key="hibernate.current_session_context_class">
    org.springframework.orm.hibernate4.SpringSessionContext</prop>
    一样没有任何效果。事务依然没自动提交????没错误抛出
    你现在要解决2个问题:
    1、使用getCurrentSession必须和线程绑定(处理现在的异常)
    2、实现事务自动提交(处理现在问题用),添加<property name="defaultAutoCommit"><value>true</value></property>sessionfactory没有defaultautocommit属性。
    我在<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"处添加了
    <property name="defaultAutoCommit" value="true"/>依然不能自动提交。
    我怀疑是否是事务起作用了。
      

  15.   

    org.hibernate.HibernateException: No Session found for current thread
    这个异常现在还有吗?
      

  16.   

    没有了,能够通过opensession和getcurrentsesion取得session就是事务在方法运行完后没自动提交!!!!!
      

  17.   

    没有了,能够通过opensession和getcurrentsesion取得session就是事务在方法运行完后没自动提交!!!!!方法开头加@Transactional这个吗
      

  18.   

    我是采用xml的,不用加注解,而且我加了测试过。一样我在sessionfactory 处添加如下
    <prop key="hibernate.current_session_context_class">thread</prop> 现在运行时抛出:
    at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:348)
    at $Proxy19.save(Unknown Source)
    at com.kunsy.dao.TodayCommImpl.queryTodayComm(TodayCommImpl.java:24)
    at com.kunsy.services.TodayCommService.queryTodayComm(TodayCommService.java:26)
    at com.kunsy.action.todayCommAction.userLogin(todayCommAction.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:119)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703)
    at java.lang.Thread.run(Unknown Source)蛋疼啊,还是不能自动提交。真想放弃
      

  19.   

    加上事务驱动吧<tx:annotation-driven/>
      

  20.   

    如果还是不行,就看看下面Spring官网和你同样问题的贴子:http://forum.springsource.org/showthread.php?119953-hibernate4-No-Session-found-for-current-thread
      

  21.   

    http://www.verydemo.com/demo_c143_i3007.html这里的方法好用。
      

  22.   

    我也遇到这一问题,同样的写法mysql能保存,oracle就是保存不起!!
      

  23.   

    你是否在service层调用的?还有你获取session使用opensession还是getCurrentSession方法,我记得调用openSession好像不行,我一直用的是后面那个方法
      

  24.   

    楼主的配置非常好。我是这么配置的,事物的提交,回滚,和getCurrentSession都可以正常使用,并没出现你的情况。以user管理示例如下:
    applicationContext.xml<?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:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
     http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context-3.2.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
     http://www.springframework.org/schema/tx
             http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <context:annotation-config />
    <context:component-scan base-package="com" /> <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssh" />
    <property name="username" value="root" />
    <property name="password" value="admin" />
    </bean>
    <!-- spring guid without explanation  -->
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <!--1.这句是扫描实体,注意需要配置-->
    <property name="packagesToScan" value="com.*.model" />
    <!-- 
    <property name="annotatedClasses">
    <list>
    <value>com.bjsxt.model.User</value>
    </list>
    </property>
    -->
    <!-- 
    <property name="mappingResources">
    <list>
    <value>product.hbm.xml</value>
    </list>
    </property>
    -->
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.sql">true</prop>
    <prop key="hibernate.format_sql">true</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
    </props>
    </property>
    </bean>
    <bean id="txManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref local="sessionFactory" />
    </property>
    </bean>
    <tx:annotation-driven transaction-manager="txManager" />
    </beans>com.bjsxt.service.UserService:package com.bjsxt.service;import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;import com.bjsxt.dao.LogDAO;
    import com.bjsxt.dao.UserDAO;
    import com.bjsxt.model.Log;
    import com.bjsxt.model.User;
    @Service
    public class UserService {
    @Autowired
    public UserDAO userDAO;
    @Autowired
    public LogDAO logDAO;
    @Transactional
    public void save(User user) {
    Log l1= new Log();
    l1.setTitle("log start..");
    logDAO.save(l1);
    userDAO.save(user);
    Log l2= new Log();
    l2.setTitle("log end..");
    logDAO.save(l2);
    }
    }com.bjsxt.dao.impl.UserDao.java:package com.bjsxt.dao.impl;import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;import com.bjsxt.dao.UserDAO;
    import com.bjsxt.model.User;@Repository
    public class UserDAOImpl implements UserDAO {
    @Autowired
    public SessionFactory sessionFactory;

    public void save(User user) {
    Session s = sessionFactory.getCurrentSession();
    s.save(user);
    System.out.println("user saved!");
    // throw new RuntimeException("error...");
    }
    }com.bjsxt.model.User.java
    Log逻辑结构与User相似,略。
      

  25.   

    sorry,补充com.bjsxt.model.User.java:package com.bjsxt.model;import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    @Entity
    public class User {
    private Integer id;
    private String username;
    private String password;
    @Id
    @GeneratedValue
    public Integer getId() {
    return id;
    }
    public void setId(Integer id) {
    this.id = id;
    }
    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    }
      

  26.   

    是否使用 springMVC  然后 使用了 listener 和filter  同时使用了 2个xml文件配置
    并将事务的配置和  aop的 范围的 的bean分开在2个xml里面?
      

  27.   

    如果 是的话, 建议先尝试, 全部配置在一个xml里面, 看能否成功~