Nhibernate fires SQL commands
Posted
by Chris
on Stack Overflow
See other posts from Stack Overflow
or by Chris
Published on 2010-02-17T09:55:30Z
Indexed on
2010/04/15
9:03 UTC
Read the original article
Hit count: 298
Hi all,
when updating an entity A, NHibernate also send an SQL update command for some other entity B. A and B are not related. Just before saving entity A, the parent of entity B is loaded via a SQLQuery. Then, when accessed, B is lazy loaded (part of a collection). If I save entity A an update statement for entity B is generated as well.
How can that be, that when saving an entity, another entity loaded before but is not related to the entity saved, is updated as well?!
Can I somehow track where the update comes from?
Btw. I am using an save event listener. Could it be that this is always triggered for entity loaded, even though they are not saved explicitly?
public class EntitySaveEventListener : NHibernate.Event.Default.DefaultSaveEventListener
{
protected override object PerformSaveOrUpdate(SaveOrUpdateEvent e)
{
//auditing
return base.PerformSaveOrUpdate(e);
}
}
Update (sorry for providing not enough info):
I tracked it down a bit. A select stateement on a entity called address is executed (is it lazy loaded by a parent).
Then I create a new entity called Request. Right before saving this entity a session flush is called which updates the address, even though I did not call save or update on the address. Address is a collection within Request.
<class name="Request" table="Request">
<bag name="addresses" access="field" cascade="all-delete-orphan" where="IsDeleted = 0">
<key column="RequestId"/>
<one-to-many class="Address"/>
</bag>
...
// address is fetched only
NHibernate.SQL: 2010-02-17 11:47:21,306 [21] DEBUG NHibernate.SQL [(null)] - SELECT addresses0_.RequestId as ServiceP8_3_, ....
// session flushed here
// address is updated
NHibernate.SQL: 2010-02-17 11:47:34,306 [21] DEBUG NHibernate.SQL [(null)] - Batch commands:
command 0:UPDATE Address SET Street = @p0, .....
Would the address be updated automatically when it is manipulated somehow even though it is not explicitly saved via it's parent (cascade)?
© Stack Overflow or respective owner