1
我是新来NHibernate和我写一些代码从使用NHibernate提取请求表中的记录总数,代码如下如下:NHibernate的抛出NHibernate.Exceptions.GenericADOException无法更新过程中获取请求
var query = request.RpcManager.Session.CreateCriteria(beanType);
......
int totalRowCount = (int)query.UniqueResult<int>();
和细节异常消息就像是以下几点:
NHibernate.Exceptions.GenericADOException was unhandled by user code
HResult=-2146232832
Message=could not update: [TestApi.DAO.AD_Window#125][SQL: UPDATE AD_WINDOW SET AD_CLIENT_ID = ?, AD_ORG_ID = ?, ISACTIVE = ?, CREATED = ?, CREATEDBY = ?, UPDATED = ?, UPDATEDBY = ?, NAME = ?, DESCRIPTION = ?, HELP = ?, WINDOWTYPE = ?, ISSOTRX = ?, ENTITYTYPE = ?, PROCESSING = ?, AD_IMAGE_ID = ?, AD_COLOR_ID = ?, ISDEFAULT = ?, WINHEIGHT = ?, WINWIDTH = ?, ISBETAFUNCTIONALITY = ? WHERE AD_WINDOW_ID = ?]
Source=NHibernate
SqlString=UPDATE AD_WINDOW SET AD_CLIENT_ID = ?, AD_ORG_ID = ?, ISACTIVE = ?, CREATED = ?, CREATEDBY = ?, UPDATED = ?, UPDATEDBY = ?, NAME = ?, DESCRIPTION = ?, HELP = ?, WINDOWTYPE = ?, ISSOTRX = ?, ENTITYTYPE = ?, PROCESSING = ?, AD_IMAGE_ID = ?, AD_COLOR_ID = ?, ISDEFAULT = ?, WINHEIGHT = ?, WINWIDTH = ?, ISBETAFUNCTIONALITY = ? WHERE AD_WINDOW_ID = ?
StackTrace:
at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.UpdateOrInsert(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Int32[] dirtyFields, Boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object obj, Object rowId, ISessionImplementor session)
at NHibernate.Action.EntityUpdateAction.Execute()
at NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
at NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
at NHibernate.Engine.ActionQueue.ExecuteActions()
at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)
at NHibernate.Event.Default.DefaultAutoFlushEventListener.OnAutoFlush(AutoFlushEvent event)
at NHibernate.Impl.SessionImpl.AutoFlushIfRequired(ISet`1 querySpaces)
at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results)
at NHibernate.Impl.CriteriaImpl.List(IList results)
at NHibernate.Impl.CriteriaImpl.UniqueResult[T]()
......
InnerException:
Code=1407
ErrorCode=-2146232008
HResult=-2146232008
Message=ORA-01407: cannot update ("COMPIERE"."AD_WINDOW"."CREATED") to NULL
Source=System.Data.OracleClient
StackTrace:
at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
at System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor)
at System.Data.OracleClient.OracleCommand.ExecuteNonQuery()
at NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand cmd)
at NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation expectation)
at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
InnerException:
我正在为获取请求,所以我不明白为什么例外是有关更新,请给我就如何解决这个问题的一些想法, 谢谢。
我试图用类似的代码:
request.RpcManager.Session.QueryOver<AD_Window>().RowCount();
但得到了同样的异常。
由于获取请求是由一般请求完成的,所以它在一个事务中。通过取消交易它解决了问题。谢谢。 – mhan0125