Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 30612|回复: 0

"NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-6 13:31:59 | 显示全部楼层 |阅读模式
     今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅...
    花了很长时间,没有从代码找出任何问题...
    那么到底哪里出问题呢?
    根据下面那段长长的错误日志:
    2017-01-06 17:07:03,680 [19] XxxXxxxx.Web.Mvc.Controllers.WarningController - UnhandleError guest /master/poitem
    NHibernate.Exceptions.GenericADOException: could not load an entity: [XxxXxxxx.Model.Format#50][SQL: /* load XxxXxxxx.Model.Format */ SELECT format0_.id as id1_4_0_, format0_.nh_version as nh2_4_0_, format0_.category_id as catego3_4_0_, format0_.name as name4_4_0_, format0_.display_name as displa5_4_0_, format0_.path as path6_4_0_, format0_.preview_image as previe7_4_0_, format0_.code as code8_4_0_, format0_.type as type9_4_0_, format0_.created_id as creat10_4_0_, format0_.created_time as creat11_4_0_, format0_.modified_id as modif12_4_0_, format0_.modified_time as modif13_4_0_ FROM wp_format format0_ WHERE format0_.id=?] ---> System.InvalidCastException: Can't convert infinite timestamp values to DateTime
       在 Npgsql.NpgsqlDataReader.GetValue(Int32 ordinal)
       在 Npgsql.NpgsqlDataReader.get_Item(Int32 ordinal)
       在 NHibernate.Driver.NHybridDataReader.System.Data.IDataRecord.get_Item(Int32 i)
       在 NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name)
       在 NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
       在 NHibernate.Type.AbstractType.Hydrate(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
       在 NHibernate.Persister.Entity.AbstractEntityPersister.Hydrate(IDataReader rs, Object id, Object obj, ILoadable rootLoadable, String[][] suffixedPropertyColumns, Boolean allProperties, ISessionImplementor session)
       在 NHibernate.Loader.Loader.LoadFromResultSet(IDataReader rs, Int32 i, Object obj, String instanceClass, EntityKey key, String rowIdAlias, LockMode lockMode, ILoadable rootPersister, ISessionImplementor session)
       在 NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader dr, Int32 i, ILoadable persister, EntityKey key, LockMode lockMode, String rowIdAlias, EntityKey optionalObjectKey, Object optionalObject, IList hydratedObjects, ISessionImplementor session)
       在 NHibernate.Loader.Loader.GetRow(IDataReader rs, ILoadable[] persisters, EntityKey[] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode[] lockModes, IList hydratedObjects, ISessionImplementor session)
       在 NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies, IResultTransformer forcedResultTransformer)
       在 NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
       在 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
       在 NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister)
       --- 内部异常堆栈跟踪的结尾 ---
       在 NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister)
       在 NHibernate.Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor session, Object id, Object optionalObject, Object optionalId)
       在 NHibernate.Loader.Entity.AbstractEntityLoader.Load(Object id, Object optionalObject, ISessionImplementor session)
       在 NHibernate.Persister.Entity.AbstractEntityPersister.Load(Object id, Object optionalObject, LockMode lockMode, ISessionImplementor session)
       在 NHibernate.Event.Default.DefaultLoadEventListener.LoadFromDatasource(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
       在 NHibernate.Event.Default.DefaultLoadEventListener.DoLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
       在 NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
       在 NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
       在 NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType)
       在 NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType)
       在 NHibernate.Impl.SessionImpl.InternalLoad(String entityName, Object id, Boolean eager, Boolean isNullable)
       在 NHibernate.Type.EntityType.ResolveIdentifier(Object id, ISessionImplementor session)
       在 NHibernate.Type.EntityType.ResolveIdentifier(Object value, ISessionImplementor session, Object owner)
       在 NHibernate.Engine.TwoPhaseLoad.InitializeEntity(Object entity, Boolean readOnly, ISessionImplementor session, PreLoadEvent preLoadEvent, PostLoadEvent postLoadEvent)
       在 NHibernate.Loader.Loader.InitializeEntitiesAndCollections(IList hydratedObjects, Object resultSetId, ISessionImplementor session, Boolean readOnly)
       在 NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
       在 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
       在 NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters, IResultTransformer forcedResultTransformer)
       在 NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters)
       在 NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
       在 NHibernate.Loader.Hql.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters)
       在 NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters)
       在 NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results)
       在 NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results)
       在 NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression queryExpression, QueryParameters parameters)
       在 NHibernate.Impl.AbstractQueryImpl2.List()
       在 NHibernate.Linq.DefaultQueryProvider.ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery)
       在 NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression)
       在 NHibernate.Linq.DefaultQueryProvider.Execute[TResult](Expression expression)
       在 Remotion.Linq.QueryableBase`1.GetEnumerator()
       在 System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
       在 System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
       在 XxxXxxxx.Model.Helper.PagedList`1..ctor(IQueryable`1 source, Int32 pageIndex, Int32 pageSize)
       在 XxxXxxxx.Model.Helper.PaginationHepler.ToPagedList[T](IQueryable`1 source, Int32 pageIndex)
       在 XxxXxxxx.Web.Mvc.Areas.Master.Controllers.PoItemSetupController.List(String ticketType, String brand, String productType, String createtimefrom, String createtimeto, String XxxXxxxx, Int32 page)
       在 lambda_method(Closure , ControllerBase , Object[] )
       在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
       在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
       在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
       在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
       在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
       在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
       在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
       在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c()
       在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
       在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
       在 System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
       在 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
       在 System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
       在 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
       在 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
       在 System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
       在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
       在 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
       在 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
       在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
       在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

     上百度,上谷歌...

    有人说会不会是Lazy加载的问题,说他试过设置Lazy=false就不会出现这个问题了???纳尼?我来个黑人三问号!这和Lazy加载有什么八杆子关系?

    有人说POJO文件和XML文件以及数据库表之间的映射出了问题???这...我表示之前没有做过任何改动,而且之前运行得好好的,不应该有这样的问题。再说了,泥煤,我这是C#程序,表跟我提POJO好吗?

    也有人说看了下异常信息,是SQL的问题!!辣么肯定是SQL的问题???好吧,我刚开始也感觉像是SQL的问题,然而我把SQL贴到数据库SQL执行器里执行,并没有问题。更何况我这程序上下全是Linq,Linq代码也会产生这种问题吗?不至于吧...

     

    好吧好吧,后来,我又看了下异常信息,发现有个提示"Can't convert infinite timestamp values to DateTime"...

    这是转换失败的意思么?

    难道是数据库出了问题?

    没有人动数据库呀?

    打开对应的wp_format表,看了下时间类型的字段,傻眼了!!!

    为什么其中一个时间字段,里面的值全是-inxxxxxx这样的东西,之所以写xxxxx,是因为我改正后忘记单词了,嘿嘿...

    而其它时间字段都是"yyyy-mm-dd hh:mm:ss"格式的值。

    于是我尝试把错误的值,通过update更新为系统当前时间。

    再次调试,终于不会出错了。

    但是我不死心,我想要知道为什么会出现这样的问题?

    要是找不出来的话,这很黑盒。。。

    我尝试手工改动正常的值为非正常的值,比如把"yyyy-mm-dd hh:mm:ss"格式的值,改成-inxxxxxx这样的东西,但是提示值非法,不允许修改...

    这个提示,我想也是对的,毕竟字段类型是timestamp,当然只能填时间,不能填其它乱七八糟的东西了。。

    哪到底是什么原因出来的呢?

    没搞懂...

    放弃之,写个文章标记一下。

     

    PS:

    2017年02月02日更新

    出现这个问题的原因,后来利用空闲时间查清楚了。
    是Npgsql.dll版本的原因。
    在低版本(2.2.3)中,Npgsql是允许DateTime类型值为"-infinity"。
    而在高版本(3.1.9)中,Npgsql是不允许的。
    当时项目中使用的是较老的2.2.3版本,我升级到3.1.9后,刚开始并没有发生异常,后来运行一段时间才发生异常。
    所以我当时排查问题时,并没有联想到是版本升级后导致的问题。
    现在回退后,就再也没有发生过这个问题了。
    真尴尬...
    嘿嘿~~

     

    2018年04月10日

    由于某些原因,再次更新Npgsql版本到最新版,再次搜索问题解决方案。

    在Github找到作者提供的解决方法:[-infinity no longer supported?](https://github.com/npgsql/npgsql/issues/557)。

    在连接字符串里添加`ConvertInfinityDateTime=true`即可允许`Npgsql`将`infinity`值转换为`DateTime.Max`或`DateTime.Min`,不再抛出异常。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-17 08:55 , Processed in 0.065396 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表