Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what does this error mean in nhibernate

Tags:

Out of the blue, i am getting this error when doing a number of updates using nhibernate.

Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [MyDomainObject]

there is no additional information in the error. Is there some recommended way to help identify the root issue or can someone give me a better explanation on what this error indicated or is a sympton around.

Some additional info

I looked at the object and all of the data looks fine, it has an ID, etc . .

Note this is running in a single call stack from an asp.net-mvc website so i wouldn't expect there to be any threading issues to worry about in terms of concurrency.

like image 891
leora Avatar asked Dec 09 '10 23:12

leora


1 Answers

NHibernate has an object, let's call it theObject. theObject.Id has a value of 42. NHibernate notices that the object is dirty. The object's Id is different than the unsaved-value, which is zero (0) for integer primary keys. So NHibernate issues an update statement, but no rows are updated, which means that there is no row in the database for that type of object with an Id of 42. So the object has been deleted without NHibernate knowing about it. This could happen inside another transaction (e.g. you have threading issues) or if someone (or another application) deleted/altered the row using SQL directly against the database.

The other possibility is that your unsaved-value is wrong. e.g. You are using -1 to indicate an unsaved-entity, but your mapping has a unsaved-value of zero. This is unlikely as your application is generally working from the sounds of it. If the unsaved-value was wrong, you wouldn't have been able to save any entities to the database as NHibernate would have been issuing UPDATE statements when it should have been issuing INSERT.

like image 127
James Kovacs Avatar answered Oct 27 '22 02:10

James Kovacs