No, this is a mapping mistake I think. It becomes a stale exception because it cannot update all records. This would be because of a problem at the cascading end right?
On Mon, Sep 28, 2009 at 11:33 AM, Mikael Henriksson <[email protected]>wrote: > I "guess" this would happen if I try to update an entity without changes? > Actually I am updating two entities and it could also be because of saving > the parent first. I am updating both records so both should have already > been created. 2x update in other words. Since I'm still awaiting NHibernate > in Action I'll ask here :) > The following code fails some of the times with the exception from the > subject. > > *Persistence code:* > _session.SaveOrUpdate(child); > _session.SaveOrUpdate(child.Parent); > > _session.Transaction.Commit(); > > *The exception:* > NHibernate.StaleStateException: Batch update returned unexpected row count > from update; actual row count: 0; expected: 2735 > at NHibernate.AdoNet.Expectations.VerifyOutcomeBatched(Int32 > expectedRowCount, Int32 rowCount) > at NHibernate.AdoNet.SqlClientBatchingBatcher.DoExecuteBatch(IDbCommand ps) > > at NHibernate.AdoNet.AbstractBatcher.ExecuteBatchWithTiming(IDbCommand ps) > > at NHibernate.AdoNet.SqlClientBatchingBatcher.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) > 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.DefaultFlushEventListener.OnFlush(FlushEvent > event) > at NHibernate.Impl.SessionImpl.Flush() > at NHibernate.Transaction.AdoTransaction.Commit() > at Company.Project.Data.Update(Child child) > > *The mappings:* > > public ParentMap() > { > Table("parent_table"); > > Id(x => x.Id) > .GeneratedBy.Assigned() > .Column("parent_id"); > > // Map columns > > HasMany(x => x.Children) > .Table("child_table") > .KeyColumn("parent_id") > .LazyLoad() > .Cascade.Delete(); > } > public ChildMap() > { > Table("child_table"); > > Id(x => x.Id) > .Column("child_id"); > > // Map columns > > References(x => x.Parent) > .Column("parent_id") > .Not.Nullable() > .Cascade.None() > .LazyLoad(); > > HasMany(x => x.SomeClass) > .KeyColumn("child_id") > .Table("some_class_table") > .Cascade.All() > .LazyLoad(); > > HasMany(x => x.SomeClass2) > .KeyColumn("child_id") > .Table("some_class_table2") > .Cascade.All() > .LazyLoad(); > } > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---
