我有以下异常似乎随机发生:
NHibernate.Exceptions.GenericADOException: could not execute query
[ select businesspr0_.BusinessProcessID as col_0_0_, businesspr0_.ProcessNumber as col_1_0_, businesspr1_.Name as col_2_0_, businesspr0_.DateCreated as col_3_0_, actor2_.DisplayName as col_4_0_, usergroup3_.Name as col_5_0_, processele5_.Name as col_6_0_ from BusinessProcess businesspr0_ inner join BusinessProcess businesspr1_ on businesspr0_.DefinitionID=businesspr1_.BusinessProcessID inner join Actor actor2_ on businesspr0_.ActorCreatedID=actor2_.ActorID left outer join UserGroup usergroup3_ on businesspr0_.UserGroupCreatedID=usergroup3_.UserGroupID left outer join Actor usergroup3_1_ on usergroup3_.UserGroupID=usergroup3_1_.ActorID inner join ActiveElement activeelem4_ on businesspr0_.BusinessProcessID=activeelem4_.BusinessProcessID inner join ProcessElement processele5_ on activeelem4_.ProcessElementID=processele5_.ProcessElementID inner join ProcessEmployees processemp6_ on businesspr0_.BusinessProcessID=processemp6_.BusinessProcessID inner join Actor actor7_ on processemp6_.ActorID=actor7_.ActorID inner join UserInGroups users8_ on actor7_.ActorID=users8_.UserGroupID inner join AppUser user9_ on users8_.UserID=user9_.UserID inner join Actor user9_1_ on user9_.UserID=user9_1_.ActorID where businesspr0_.IsDefinition=0 and (businesspr0_.Finished is null) and @p0=user9_.UserID ]
Name:userID - Value:32771
[SQL: select businesspr0_.BusinessProcessID as col_0_0_, businesspr0_.ProcessNumber as col_1_0_, businesspr1_.Name as col_2_0_, businesspr0_.DateCreated as col_3_0_, actor2_.DisplayName as col_4_0_, usergroup3_.Name as col_5_0_, processele5_.Name as col_6_0_ from BusinessProcess businesspr0_ inner join BusinessProcess businesspr1_ on businesspr0_.DefinitionID=businesspr1_.BusinessProcessID inner join Actor actor2_ on businesspr0_.ActorCreatedID=actor2_.ActorID left outer join UserGroup usergroup3_ on businesspr0_.UserGroupCreatedID=usergroup3_.UserGroupID left outer join Actor usergroup3_1_ on usergroup3_.UserGroupID=usergroup3_1_.ActorID inner join ActiveElement activeelem4_ on businesspr0_.BusinessProcessID=activeelem4_.BusinessProcessID inner join ProcessElement processele5_ on activeelem4_.ProcessElementID=processele5_.ProcessElementID inner join ProcessEmployees processemp6_ on businesspr0_.BusinessProcessID=processemp6_.BusinessProcessID inner join Actor actor7_ on processemp6_.ActorID=actor7_.ActorID inner join UserInGroups users8_ on actor7_.ActorID=users8_.UserGroupID inner join AppUser user9_ on users8_.UserID=user9_.UserID inner join Actor user9_1_ on user9_.UserID=user9_1_.ActorID where businesspr0_.IsDefinition=0 and (businesspr0_.Finished is null) and @p0=user9_.UserID]
---> System.IndexOutOfRangeException: col_0_0_
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.Hql.Ast.ANTLR.Loader.QueryLoader.GetResultColumnOrRow(Object[] row, IResultTransformer resultTransformer, 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 DotExe.TiCat.DomainModel.Repository.ProcessModel.BusinessProcessDAO.GetProcessForUserGroups(Int32 userID) in D:\Projects\TiCatRNIDS\DotExe.TiCat4\DotExe.TiCat.DomainModel.Repository\ProcessModel\BusinessProcessDAO.cs:line 98
at DotExe.TiCat4.UseCaseRepository.TicketProcess.TicketQueues.RefreshQueue() in D:\Projects\TiCatRNIDS\DotExe.TiCat4\DotExe.TiCat4\UseCaseRepository\TicketProcess\TicketQueues.cs:line 128
奇怪的部分是这个System.IndexOutOfRangeException:col_0_0_我无法弄清楚为什么会发生。 如有必要,我可以使用一些xml映射更新帖子。
TNX
更新
映射和查询抛出ex:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DotExe.TiCat.DomainModel" namespace="DotExe.TiCat.DomainModel.Process">
<class name="BusinessProcess" table="BusinessProcess">
<id name="BusinessProcessID">
<generator class="hilo"/>
</id>
<property name = "Name" length="1024" type="string" not-null ="false" />
<property name = "Description" length="5000" type="string" not-null ="false" />
<property name = "ProcessNumber" length="500" type="string" not-null ="false" />
<property name = "CommentOnSolve" length="5000" type="string" not-null ="false" />
<property name="IsDefinition" type="bool"/>
<property name="PlaningTimeToSpend" type="long"/>
<property name="SpendTime" type="long"/>
<property name="DateCreated" type="DateTime" not-null="false"/>
<property name="PlanToStart" type="DateTime" not-null="false"/>
<property name="PlanToFinish" type="DateTime" not-null="false"/>
<property name="Started" type="DateTime" not-null="false"/>
<property name="Finished" type="DateTime" not-null="false"/>
<property name="CustomerRequestCallBack" type="bool" not-null="false"/>
<property name="EscalationTimeLimitInPercents" type="int"/>
<property name="IsEscalated" type="bool"/>
<property name="IsInfinite" type="bool"/>
<many-to-one name="WorkingWeek" class="WorkingWeek" column="WorkingWeekID" not-null="false" lazy="false"/>
<many-to-one name="Priority" class="ProcessPriority" column="PriorityID" not-null="false" lazy="false"/>
<many-to-one name="UserCreated" class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorCreatedID" not-null="false" lazy="false"/>
<many-to-one name="UserSolved" class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorSolvedID" not-null="false" lazy="false"/>
<many-to-one name="GroupCreated" class="DotExe.TiCat.DomainModel.Actors.UserGroup" column="UserGroupCreatedID" not-null="false" lazy="false"/>
<many-to-one name="GroupSolved" class="DotExe.TiCat.DomainModel.Actors.UserGroup" column="UserGroupSolvedID" not-null="false" lazy="false"/>
<many-to-one name="Definition" class="BusinessProcess" column="DefinitionID" cascade="none" />
<set name="Elements" lazy="false" cascade="save-update">
<key column="BusinessProcessID"/>
<one-to-many class="ProcessElement"/>
</set>
<set name="ActiveElements" table="ActiveElement" lazy="false" cascade="save-update">
<key column="BusinessProcessID"/>
<many-to-many class="ProcessElement" column="ProcessElementID"/>
</set>
<set name="ProcessConsumers" table="ProcessConsumers" lazy="false" cascade="save-update">
<key column="BusinessProcessID"/>
<many-to-many class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorID"/>
</set>
<set name="ProcessEmployees" table="ProcessEmployees" lazy="false">
<key column="BusinessProcessID"/>
<many-to-many class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorID"/>
</set>
<set name="ProcessSupervisors" table="ProcessSupervisors" lazy="false">
<key column="BusinessProcessID"/>
<many-to-many class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorID"/>
</set>
<set name="Flows" lazy="false" cascade="save-update">
<key column="BusinessProcessID"/>
<one-to-many class="SequenceFlow"/>
</set>
<set name="PriorityTimeRules" lazy="false" cascade="save-update">
<key column="BusinessProcessID"/>
<one-to-many class="DotExe.TiCat.DomainModel.BusinessRules.PriorityTimeRule"/>
</set>
</class>
<class name="ProcessElement" table="ProcessElement">
<id name="ProcessElementID">
<generator class="hilo"/>
</id>
<property name = "Name" length="1024" type="string" not-null ="true" />
<property name="IsDefinition" type="bool"/>
<property name="IsState" type="bool"/>
<many-to-one class="BusinessProcess" name="MemberOf" lazy="false" cascade="save-update" column="BusinessProcessID"/>
<many-to-one class="ProcessElement" name="Definition" column="DefinitionID"/>
<joined-subclass name="Activity">
<key column="ActivityID"/>
<property name = "Name" length="1024" type="string" not-null ="true" />
<property name = "Description" length="4000" type="string" not-null ="false" />
<set name="States" >
<key column="ActivityID"/>
<one-to-many class="ActivityState"/>
</set>
<joined-subclass name="UserTask" table="UserTask">
<key column="UserTaskID"/>
<property name="PlaningTimeToSpend" type="int"/>
<property name="SpendTime" type="int"/>
<property name="PlanToStart" type="DateTime" not-null="false"/>
<property name="PlanToFinish" type="DateTime" not-null="false"/>
<property name="Started" type="DateTime" not-null="false"/>
<property name="Finished" type="DateTime" not-null="false"/>
<set name="Comments">
<key column="UserTaskID"/>
<one-to-many class="TaskComment"/>
</set>
<set name="UserTaskEmployees">
<key column="UserTaskID"/>
<many-to-many class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorID"/>
</set>
<set name="UserTaskSupervisors">
<key column="UserTaskID"/>
<many-to-many class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorID"/>
</set>
<set name="Priorities">
<key column="UserTaskID"/>
<one-to-many class="UserTaskPriority"/>
</set>
<set name="AssignmentRules">
<key column="UserTaskID"/>
<one-to-many class="DotExe.TiCat.DomainModel.BusinessRules.AssignmentRule"/>
</set>
<many-to-one class="DotExe.TiCat.DomainModel.UseCase.ClientApplicationConfig" name="Application" column="ApplicationConfigID"/>
<many-to-one class="UserTaskPriority" name="TaskPriority" column="TaskPriorityID"/>
</joined-subclass>
<joined-subclass name="SendTask">
<key column="SendTaskID"></key>
<many-to-one name="EmailAccount" class="DotExe.TiCat.DomainModel.Config.EmailAccount" column="EmailAccountID" lazy="false"></many-to-one>
<many-to-one name="Template" class="DotExe.TiCat.DomainModel.Templates.Template" column="TemplateID" lazy="false"></many-to-one>
<set name="Actors" lazy="false">
<key column="SendTaskID"></key>
<many-to-many class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorID"></many-to-many>
</set>
<set name="EmailMessages">
<key column="SendTaskID"></key>
<one-to-many class="DotExe.TiCat.DomainModel.Email.EmailMessage"/>
</set>
</joined-subclass>
</joined-subclass>
<joined-subclass name="Gateway">
<key column="GatewayID"/>
<joined-subclass name="ExclusiveGateway">
<key column="ExclusiveGatewayID"/>
</joined-subclass>
</joined-subclass>
<joined-subclass name="Event">
<key column="EventID"></key>
<property name="ExecutionTime" type="DateTime" not-null="false"></property>
<joined-subclass name="StartEvent">
<key column="StartEventID"></key>
</joined-subclass>
<joined-subclass name="EndEvent">
<key column="EntEventID"></key>
</joined-subclass>
</joined-subclass>
</class>
<class name="ActivityState" table="ActivityState">
<id name="ActivityStateID">
<generator class="hilo"/>
</id>
<property name = "Name" length="1024" type="string" not-null ="true" />
<property name = "Description" length="4000" type="string" not-null ="false" />
<many-to-one name="StateOf" class="Activity" column="ActivityID"/>
<property name="IsEndState" type="bool"/>
<property name="IsStartState" type="bool"/>
<property name="IsPauseState" type="bool"/>
<property name="IsProcessSerializationState" type="bool"/>
</class>
<class name="SequenceFlow" table ="SequenceFlow">
<id name="SequenceFlowID">
<generator class="hilo"/>
</id>
<many-to-one class="ProcessElement" name="Source" column="SourceID" lazy="false" cascade="save-update"/>
<many-to-one class="ProcessElement" name="Target" column="TargetID" lazy="false" cascade="save-update"/>
<many-to-one name="Process" class="BusinessProcess" column="BusinessProcessID" cascade="save-update"/>
</class>
<class name="UserTaskPriority" table ="UserTaskPriority">
<id name="UserTaskPriorityID">
<generator class="hilo"/>
</id>
<property name = "Name" length="1024" type="string" not-null ="true" />
</class>
<class name="TaskComment" table ="TaskComment">
<id name="TaskCommentID">
<generator class="hilo"/>
</id>
<property name = "Comment" length="4000" type="string" not-null ="true" />
<many-to-one name="Task" class="ProcessElement" column="UserTaskID"/>
<many-to-one name="Actor" class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorID"/>
<many-to-one name="Process" class="BusinessProcess" column="BusinessProcessID"/>
<many-to-one name="Group" class="DotExe.TiCat.DomainModel.Actors.UserGroup" column="UserGroupID"/>
<property name="CommentTime" type="DateTime" not-null="false" />
</class>
<class name="TransitionLog">
<id name="TransitionLogID">
<generator class="hilo"/>
</id>
<property name="LogDate" type="DateTime"/>
<property name="TaskStarted" type="DateTime" not-null ="false" />
<property name="TaskEnded" type="DateTime" not-null ="false" />
<property name="TimeSpend" type="int" not-null ="false" />
<set name="SendToActors" table="SendToActorLog" lazy="false">
<key column="TransitionLogID"/>
<many-to-many class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorID"/>
</set>
<many-to-one name="Actor" class="DotExe.TiCat.DomainModel.Actors.Actor" column="ActorID" lazy="false"/>
<many-to-one name="Group" class="DotExe.TiCat.DomainModel.Actors.UserGroup" column="UserGroupID"/>
<many-to-one name="FromElement" class="ProcessElement" column="FromElementID" lazy="false"/>
<many-to-one name="ToElement" class="ProcessElement" column="ToElementID"/>
<many-to-one name="Process" class="BusinessProcess" column="BusinessProcessID"/>
<many-to-one name="LogType" class="LogType" column="LogTypeID" lazy="false"/>
<property name="Comment" length="4000" type="string" not-null ="false" />
</class>
<class name="LogType">
<id name="LogTypeID"/>
<property name = "Name" length="1024" type="string" not-null ="false" />
<property name = "DisplayName" length="1024" type="string" not-null ="false" />
</class>
<class name="ProcessPriority">
<id name="ProcessPriorityID"/>
<property name = "Name" length="1024" type="string" not-null ="false" />
<property name = "DisplayName" length="1024" type="string" not-null ="false" />
</class>
<class name="WorkingWeek">
<id name="WorkingWeekID">
<generator class="hilo"/>
</id>
<property name="MondayFrom" type="DateTime" not-null="true"/>
<property name="MondayTo" type="DateTime" not-null="true"/>
<property name="TuesdayFrom" type="DateTime" not-null="true"/>
<property name="TuesdayTo" type="DateTime" not-null="true"/>
<property name="WednesdayFrom" type="DateTime" not-null="true"/>
<property name="WednesdayTo" type="DateTime" not-null="true"/>
<property name="ThursdayFrom" type="DateTime" not-null="true"/>
<property name="ThursdayTo" type="DateTime" not-null="true"/>
<property name="FridayFrom" type="DateTime" not-null="true"/>
<property name="FridayTo" type="DateTime" not-null="true"/>
<property name="SaturdayFrom" type="DateTime" not-null="true"/>
<property name="SaturdayTo" type="DateTime" not-null="true"/>
<property name="SundayFrom" type="DateTime" not-null="true"/>
<property name="SundayTo" type="DateTime" not-null="true"/>
<property name="Is24x7" type="bool"/>
<property name="Name" type="string" length="256" not-null="true"/>
<!--<set name="BusinessProcesses" cascade="none" lazy="false">
<key column="WorkingWeekID"/>
<one-to-many class="BusinessProcess"/>
</set>-->
</class>
</hibernate-mapping>
查询:
IList<object[]> result =
session.CreateQuery(" select bp.BusinessProcessID, bp.ProcessNumber, def.Name as Definition," +
" bp.DateCreated, actor.DisplayName as UserCreated," +
" group.Name as GroupCreated, task.Name as ActiveTask " +
" from BusinessProcess bp " +
" join bp.Definition as def " +
" join bp.UserCreated as actor " +
" left join bp.GroupCreated as group " +
" join bp.ActiveElements as task" +
" join bp.ProcessEmployees as res" +
" join res.Users as users " +
" where bp.IsDefinition = false " +
" and bp.Finished is null" +
" and :userID = users.ActorID").SetParameter("userID", userID).List<object[]>();
答案 0 :(得分:1)
当我尝试将空值映射到不可为空的属性(即整数)时,我遇到了这个错误。确保你确保sql值不可为空,或者只是让c#属性为nullable(public virtual int? NumberOfPoints { get; set; }
)
答案 1 :(得分:0)
我不知道原因。但是映射中有一些奇怪的东西:Activity有属性&#34; Name&#34;,它已经映射到基类中。这可能导致指数超出范围。周围可能存在更多问题。
要非常小心像#34; Actors&#34;它是多对多的,不指定表名。定义另一个&#34; Actors&#34;的风险很高。设置会产生冲突的表定义。
无关紧要:有些集应该是反向的,因为有一个元素到父元素的引用。