NHibernate.ADOException: could not execute query --> System.IndexOutOfRangeException: id13_

99封情书 提交于 2020-01-07 03:14:25

问题


I've got a really simple class that is giving a strange error. It's quite simple one and has no relationship with another table. The strangest part is that seems to happen randomly but especially when my website had heavy load of requests... I use Nhibernate that is version 2.0.1.400.

I had a search on net about it and most of them who had same problem say that is highly a bug of Nhibernate on forums... Anyone had have this kind of problem before? and came with a solution?

Could this be a problem with the database connection, pooling stuff ???

The craziest thing about it, only occurs sometimes and so the website goes down.. after IIS reset, all works fine, but then who knows when it's gonna occur again!

I'm getting:

Server Error in '/' Application.

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Exception: Unipa Belediye Master Select<T>(string p_sql,bool closeSession) de Sorun Var ---> NHibernate.ADOException: could not execute query
[ select gelirgenel0_.id as id13_, gelirgenel0_.ParametreAdi as Parametr2_13_, gelirgenel0_.KullanimNedeni as Kullanim3_13_, gelirgenel0_.Degeri as Degeri13_ from Parametre.GelirGenelParametre gelirgenel0_ where (id in(6 , 7 , 62 , 65)) ]
[SQL: select gelirgenel0_.id as id13_, gelirgenel0_.ParametreAdi as Parametr2_13_, gelirgenel0_.KullanimNedeni as Kullanim3_13_, gelirgenel0_.Degeri as Degeri13_ from Parametre.GelirGenelParametre gelirgenel0_ where (id in(6 , 7 , 62 , 65))] ---> System.IndexOutOfRangeException: id13_
  at System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
  at System.Data.SqlClient.SqlDataReader.GetOrdinal(String name)
  at NHibernate.Driver.NHybridDataReader.GetOrdinal(String name)
  at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name)
  at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
  at NHibernate.Loader.Loader.GetKeyFromResultSet(Int32 i, ILoadable persister, Object id, IDataReader rs, ISessionImplementor session)
  at NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies)
  at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
  at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
  at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
  --- End of inner exception stack trace ---
  at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
  at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
  at NHibernate.Hql.Classic.QueryTranslator.List(ISessionImplementor session, QueryParameters queryParameters)
  at NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results)
  at NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results)
  at NHibernate.Impl.SessionImpl.List[T](String query, QueryParameters parameters)
  at NHibernate.Impl.QueryImpl.List[T]()
  at UnipaBelediyeMaster.Master.Select[T](String p_sql, Boolean closeSession) in D:\BelediyeNet\Web\Menu.Src\UnipaBelediyeMaster\UnipaBelediyeMasterr\Master.cs:line 449
  --- End of inner exception stack trace ---
  at UnipaBelediyeMaster.Master.Select[T](String p_sql, Boolean closeSession) in D:\BelediyeNet\Web\Menu.Src\UnipaBelediyeMaster\UnipaBelediyeMasterr\Master.cs:line 461
  at Service.GelirGenelParametreAlIdler(String idler) in c:\webServiceBornovaBel\App_Code\Service.cs:line 1044
  --- End of inner exception stack trace ---

and below is my entity class:

[Serializable]
    public class GelirGenelParametre
    {
        #region Member Variables
        protected decimal _id;
        protected string _parametreadi;
        protected string _kullanimnedeni;
        protected string _degeri;
        #endregion
        #region Constructors

        public GelirGenelParametre() {}

        public GelirGenelParametre(decimal id, string parametreadi, string kullanimnedeni, string degeri) 
        {
            this._id= id;
            this._parametreadi= parametreadi;
            this._kullanimnedeni= kullanimnedeni;
            this._degeri= degeri;
        }

        #endregion
        #region Public Properties
        public  virtual decimal Id
        {
            get { return _id; }
            set {_id= value; }
        }
        public  virtual string ParametreAdi
        {
            get { return _parametreadi; }
            set {_parametreadi= value; }
        }
        public  virtual string KullanimNedeni
        {
            get { return _kullanimnedeni; }
            set {_kullanimnedeni= value; }
        }
        public  virtual string Degeri
        {
            get { return _degeri; }
            set {_degeri= value; }
        }
        #endregion

and mapping xml:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <!--Build: with lujan99@usa.net Nhibernate template-->
  <class name="UnipaBelediyeMaster.GelirGenelParametre,UnipaBelediyeMaster" table="GelirGenelParametre" lazy="false" schema="Parametre">
    <id name="Id" column="id" type="Decimal">
      <generator class="assigned" />
    </id>
    <property name="ParametreAdi" column="ParametreAdi" type="string" not-null="true" />
    <property name="KullanimNedeni" column="KullanimNedeni" type="string" not-null="true" />
    <property name="Degeri" column="Degeri" type="string" not-null="true" />
  </class>
</hibernate-mapping>

Both entity and mapping classes seems fine, otherwise my website would be failed all the time... it just fails every now and then...

Any idea?


回答1:


Make sure that you are instantiating a new hibernate session only when there is no other session active. This would make the sessions compete for the same resource and result in deadlock like condition. If there is something like this, simply remove the second session and use the first session itself to query the database.



来源:https://stackoverflow.com/questions/23848145/nhibernate-adoexception-could-not-execute-query-system-indexoutofrangeexcep

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!