Spring.Net(&;NHibernate?),缺少异常转换器

Spring.Net(&;NHibernate?),缺少异常转换器,.net,asp.net-mvc,nhibernate,spring.net,.net,Asp.net Mvc,Nhibernate,Spring.net,我正在将一个使用Spring.NET和NHibernate运行的ASP.NETWebForm应用程序移植到ASP.NETMVC3。在创建了一个新项目并验证了Spring.Net可以在同一个解决方案中正确地跨项目注入依赖项之后,我继续在新解决方案中导入服务和持久性层项目 我的映射现在看起来有点正常(更多信息见本文末尾),但当我启动应用程序时,出现以下错误: 在容器中未找到持久性异常转换器。不能 执行异常转换 [ConfigurationErrorsException:创建上下文“spring.ro

我正在将一个使用Spring.NET和NHibernate运行的ASP.NETWebForm应用程序移植到ASP.NETMVC3。在创建了一个新项目并验证了Spring.Net可以在同一个解决方案中正确地跨项目注入依赖项之后,我继续在新解决方案中导入服务和持久性层项目

我的映射现在看起来有点正常(更多信息见本文末尾),但当我启动应用程序时,出现以下错误:

在容器中未找到持久性异常转换器。不能 执行异常转换

[ConfigurationErrorsException:创建上下文“spring.root”时出错: 在容器中找不到持久性异常转换器。无法 执行例外翻译。]

如果我能很好地理解这一点,这意味着引发了一个异常,而Spring.Net不知道如何映射/处理它。。。对吗

假设它来自NHibernate,并且如中有关NHibernate集成的解释,我在映射中添加了ExceptionTranslationProcessor

<object type="Spring.Dao.Attributes.PersistenceExceptionTranslationPostProcessor, Spring.Data"/>

我在Persistence.xml文件中添加了
PersistenceExceptionTranslationPostProcessor。出于想法,我还尝试将其添加到另一个xml中,但没有任何效果。

当容器中没有实现
IPersistenceExceptionTranslator
的对象时,会出现此错误。当您有一个Spring.Net+NHibernate应用程序时,这通常是Spring.Net的
LocalSessionFactoryObject
PersistenceExceptionTranslationPostProcessor
检查注册的
IPersistenceExceptionTranslator
实例的上下文

在NHibernate异常中不会出现此错误,但在容器启动时会出现此错误。问题是Spring容器想要这样做,但它在容器中找不到一个异常转换器

如果您不使用Spring.net的
LocalSessionFactoryObject
(无论出于何种原因),您应该向容器注册自己的
IPersistenceExceptionTranslator
。界面非常简单:

public interface IPersistenceExceptionTranslator
{
    DataAccessException TranslateExceptionIfPossible(Exception ex);
}

可以以为例。

当容器中没有实现
IPersistenceExceptionTranslator
的对象时,会出现此错误。当您有一个Spring.Net+NHibernate应用程序时,这通常是Spring.Net的
LocalSessionFactoryObject
PersistenceExceptionTranslationPostProcessor
检查注册的
IPersistenceExceptionTranslator
实例的上下文

在NHibernate异常中不会出现此错误,但在容器启动时会出现此错误。问题是Spring容器想要这样做,但它在容器中找不到一个异常转换器

如果您不使用Spring.net的
LocalSessionFactoryObject
(无论出于何种原因),您应该向容器注册自己的
IPersistenceExceptionTranslator
。界面非常简单:

public interface IPersistenceExceptionTranslator
{
    DataAccessException TranslateExceptionIfPossible(Exception ex);
}

您可以以为例。

除了@Marijn的post之外,根据您的配置,有时异常
在容器中找不到持久性异常转换器。
涵盖了真正的原因。附加到进程启动并捕获所有spring.net异常(Ctrl+Alt+E/CLR异常)通常会揭示根本原因

例如,配置错误的
会话工厂
,即使设置了正确的
PersistenceExceptionTranslationPostProcessor并将其注册到上下文中

我通常从我的DAO中删除
存储库
属性(它通过AOP添加异常转换并覆盖错误),以消除出现底层错误的
PersistenceExceptionTranslationPostProcessor


此外,除了@Marijn的post之外,您还可以发布
web.config
Persistence.xml

的相关部分,具体取决于您的配置,有时容器中会出现异常
无持久异常转换器。
涵盖了真正的原因。附加到进程启动并捕获所有spring.net异常(Ctrl+Alt+E/CLR异常)通常会揭示根本原因

例如,配置错误的
会话工厂
,即使设置了正确的
PersistenceExceptionTranslationPostProcessor并将其注册到上下文中

我通常从我的DAO中删除
存储库
属性(它通过AOP添加异常转换并覆盖错误),以消除出现底层错误的
PersistenceExceptionTranslationPostProcessor


此外,您还可以发布
web.config
Persistence.xml

的相关部分。非常感谢,这确实只是一种掩饰。真正的根本原因是NHibernate(Iesi.Collections)的依赖项没有被复制到输出目录。。。因此Spring很难实例化DAO层。。。该死的>\非常感谢,这确实只是一种掩饰。真正的根本原因是NHibernate(Iesi.Collections)的依赖项没有被复制到输出目录。。。因此Spring很难实例化DAO层。。。该死的>_