【问题标题】:Exception Could not open Hibernate Session for transaction异常无法为事务打开休眠会话
【发布时间】:2010-05-25 06:13:34
【问题描述】:

有时我在我的 NHibernate 日志中遇到这个问题。我的应用程序在那一刻停止。

更新了数据配置。

即使事务成功后。应用程序与数据库的连接persist.in

它显示的休眠日志

休眠日志

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Impl.SessionImpl [(null)] -

执行刷新

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Impl.ConnectionManager [(null)]

(null)> - 注册刷新开始

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Impl.ConnectionManager [(null)]

(null)> - 注册flush end

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Impl.SessionImpl [(null)] -

冲洗后

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Impl.SessionImpl [(null)] -

交易完成前

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Impl.ConnectionManager [(null)]

(null)> - 主动释放数据库连接

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Connection.ConnectionProvider

[(null)] - 关闭连接

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Impl.SessionImpl [(null)] -

交易完成

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Transaction.AdoTransaction [(null)]

(null)> - 运行 AdoTransaction.Dispose()

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Impl.SessionImpl [(null)] -

闭幕式

2010-05-21 14:45:08,428 [工人] [0] 调试 NHibernate.Impl.BatcherImpl [(null)] -

运行 BatcherImpl.Dispose(true)

下面是我的数据配置文件

   <?xml version="1.0" encoding="utf-8" ?>

<objects 
xmlns="http://www.springframework.net" 

         xmlns:db="http://www.springframework.net/database"

     xmlns:tx="http://www.springframework.net/tx">

  <object id="AuditLogger" type="Risco.Rsp.Ac.Audit.AuditLogger, Risco.Rsp.Ac.Audit" singleton="false"> 

    <property name="CacheSettings" ref="CacheSettings"  />
  </object>


  <object id="CacheSettings"

          type="Risco.Rsp.Ac.AMAC.CacheMgmt.Utilities.UpdateEntityCacheHelper, 

Risco.Rsp.Ac.AMAC.CacheMgmt.Utilities" singleton="false"/>

  <!-- Property placeholder configurer for database settings-->

  <object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">

    <property name="ConfigSections" value="databaseSettings"/>
  </object>

  <db:provider id="AMACDbProvider"

                provider="OracleClient-2.0"

    connectionString="Data Source=RISCODEVDB;User ID=amacdevuser; Password=amacuser1234;"/>

  <!-- For creating Factory objects -->
  <object id="NHibernateSessionFactory" 

  type="Spring.Data.NHibernate.LocalSessionFactoryObject,Spring.Data.NHibernate12">

    <property name="DbProvider" ref="AMACDbProvider"/>

    <property name="MappingAssemblies">
      <list>
              <value>
    Risco.Rsp.Ac.AMAC.CacheMappings

       </value>

      </list>

    </property>

    <property name="HibernateProperties">

      <dictionary>

        <entry key="hibernate.connection.provider"

               value="NHibernate.Connection.DriverConnectionProvider"
         />

        <entry key="hibernate.dialect"

               value="NHibernate.Dialect.Oracle9Dialect"
              />


        <entry key="hibernate.connection.driver_class"


               value="NHibernate.Driver.OracleClientDriver"/>

      </dictionary>


    </property>

  </object>


  <object id="HibernateTemplate" type="Spring.Data.NHibernate.HibernateTemplate"

singleton="false">

    <property name="SessionFactory"

 ref="NHibernateSessionFactory" />

    <property name="TemplateFlushMode" 
value="Auto" />

    <property name="CacheQueries" value="true" />

    <property name="EntityInterceptor" ref="AuditLogger"/>

  </object>


  ><object id="transactionManager" singleton="true"  

    type="Spring.Data.NHibernate.HibernateTransactionManager, >Spring.Data.NHibernate12">  

    <property name="DbProvider" ref="AMACDbProvider"/>

    <property name="SessionFactory" ref="NHibernateSessionFactory"/>

    <property name="EntityInterceptor" ref="AuditLogger"/>

  </object>


  <object id="EventPubSubDAOTx" 

type="Spring.Transaction.Interceptor.TransactionProxyFactoryObject,Spring.Data">

    <property name="PlatformTransactionManager" ref="transactionManager"/>

    <property name="Target" ref="EventPubSubDAO"/>

    <property name="TransactionAttributes">
       <name-values>

        <add key="Save*" value="PROPAGATION_REQUIRES_NEW"/>

        <add key="Delete*" value="PROPAGATION_REQUIRED"/>

      </name-values>

    </property>

  </object>


  <object id="EventPubSubDAO"  

    type="Risco.Rsp.Ac.AMAC.DAO.EventPubSubMgmt.EventPubSubDAO, 

   Risco.Rsp.Ac.AMAC.DAO.EventPubSubMgmt">

    <property name="HibernateTemplate" ref="HibernateTemplate" />

    <property name="SessionFactory" ref="NHibernateSessionFactory"/>

  </object>

  <!-- EventPubSubMgmt DAO -->


  <tx:attribute-driven/>

  </objects>

请帮我解决这个问题。谢谢

【问题讨论】:

  • 等等,水晶球正在清理……

标签: nhibernate transactions spring.net


【解决方案1】:

该异常通常是由使用已关闭的会话引起的。您的other question 还指出您可能需要重新考虑您的连接和会话使用情况。

由于您的问题中没有太多信息,因此很难提出改进建议。

【讨论】:

  • 感谢 jan 的回复。能否请您提供您的邮件 ID,以便我可以向您发送 DataConfiguration 和更多日志
  • 我宁愿不要。这就是这个网站的用途,我的时间不是免费的。您应该自己进行一些研究,尝试找出问题所在,并将结果发布在此站点上。如果您花一些时间找出问题所在,并花一些时间正确描述问题,StackOverflow 上有很多人愿意帮助您。
  • 我研究了很多,然后才想出。事件我想帮助堆栈溢出的人,我刚刚问过你。因为它对你来说更方便。以后我们会发布它。感谢您的回复
猜你喜欢
  • 2011-06-13
  • 2014-07-26
  • 2017-06-19
  • 2017-09-04
  • 1970-01-01
  • 2013-08-09
  • 2015-10-07
  • 2015-04-14
相关资源
最近更新 更多