当前位置: 代码迷 >> J2EE >> 用getCurrentSession() 发生如下有关问题 org.hibernate.HibernateException: No Hibernate Sessi
  详细解决方案

用getCurrentSession() 发生如下有关问题 org.hibernate.HibernateException: No Hibernate Sessi

热度:259   发布时间:2016-04-17 23:49:03.0
用getCurrentSession() 发生如下问题 org.hibernate.HibernateException: No Hibernate Sessi

在做个测试,发生下面的情况,哪位资深帮看,能否帮解决一下,
1、操作进行保存数据,发生如下错误,

org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:700)
at com.xj.survey.dao.impl.BaseDaoImpl.saveEntity(BaseDaoImpl.java:34)
at com.xj.survey.service.impl.BaseServiceImpl.saveEntity(BaseServiceImpl.java:27)
at com.xj.survey.test.TestUserService.insertUser(TestUserService.java:34)
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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

2、然后在网上看了一下,说需要在 bean.xml文件
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource" />
<!--  <property name="configLocation" value="classpath:hibernate.cfg.xml" /> -->

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
                               <prop key="hibernate.format_sql">true</prop>                       <!--  是否显示SQL语句 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>                      <!--  自动根据模型生成,更新表 -->
  <prop key="hibernate.jdbc.batch_size">50</prop>                       <!--  每50条语句提交一次  -->
      
 <prop key="hibernate.current_session_context_class">thread</prop>   
 <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>  

   </props>
</property>

3、添加上后,再执行发生如下 错误:

org.hibernate.HibernateException: save is not valid without active transaction
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:340)
at com.sun.proxy.$Proxy8.save(Unknown Source)
at com.xj.survey.dao.impl.BaseDaoImpl.saveEntity(BaseDaoImpl.java:34)
at com.xj.survey.service.impl.BaseServiceImpl.saveEntity(BaseServiceImpl.java:27)
at com.xj.survey.test.TestUserService.insertUser(TestUserService.java:34)
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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
  相关解决方案