@Krzysztof Have you managed to get a solution to this, I am in a similar situation and attempting to get a conclusive answer http://groups.google.com/group/nhusers/browse_thread/thread/b6807c2a486073d8/48a40348dbeb8799#48a40348dbeb8799
On May 10, 5:36 am, Krzysztof Kozmic <[email protected]> wrote: > @Ricardo > > I was. Actually I was overriding EntityIsTransient/Persistent methods > and calling return base.ThisMethod() at the end > > Krzysztof > > On May 9, 7:30 pm, Ricardo Peres <[email protected]> wrote: > > > > > > > > > @Krzysztof: > > > Shouldn't you be calling the base class' implementation? > > > public class MySaveOrUpdateEventListener: > > DefaultSaveOrUpdateEventListener > > { > > public override void OnSaveOrUpdate(SaveOrUpdateEvent @event) > > { > > //do something with the entity > > base.OnSaveOrUpdate(@event); > > } > > > } > > > On May 9, 2:53 am, José F. Romaniello <[email protected]> wrote: > > > > 1 use the interface as fabio Said. > > > 2 the order of the listeners is important. I think you should put > > > yours after the nhibernates for this case... But to be honest i am not > > > sure. Ill try it tomorrow > > > > 2011/5/8, Krzysztof Kozmic <[email protected]>: > > > > > ok here comes the update. > > > > > I checked the approach outlined by Fabio again. I implemented the > > > > ISaveOrUpdate and IEntityFlush event listeners and I set the values > > > > directly on the object. > > > > > However even though I can see the values are set on the object the > > > > INSERT that NHibernate tries to execute passes NULL values for those > > > > properties instead. > > > > > Also as a sidenote I noticed even non-dirty objects are passed to > > > > those listeners which is at least surprising to me. > > > > > Also as another sidenote, I used as my base class > > > > DefaultSaveOrUpdateListener and I'm overriding EntityIsPersistent/ > > > > EntityIsTransient methods and NHibernate is passing my newly created > > > > object to EntityIsPersistent method which is again at least > > > > surprising. > > > > > Anyway - the biggest issue is that NHibernate does not seem to care > > > > about the values I provide to the object in the listener and I'm sure > > > > they are set, because if I look in the debugger at the time the > > > > exception is thrown the values are set and I could see my listeners > > > > get hit. > > > > > cheers, > > > > Krzysztof > > > > > On May 7, 2:10 pm, Krzysztof Kozmic <[email protected]> > > > > wrote: > > > >> I did briefly try that, and ended up having some different issues > > > >> (don't remember exactly what the problem was now, I'll try to > > > >> reproduce that on Monday). > > > > >> Does FlushEventListener get called for dirty objects only? > > > > >> Cheers, > > > >> Krzysztof > > > > >> On May 6, 10:04 pm, Fabio Maulo <[email protected]> wrote: > > > > >> > IPreUpdate is intended to be used for entity-state checking (veto) > > > >> > not > > > >> > to > > > >> > change the state. > > > >> > What is happening is that NH found a strange operation in a > > > >> > collection > > > >> > (something like "somebody have changed it outside my control or I > > > >> > have a > > > >> > bug"). > > > >> > For what you need you have to use ISaveOrUpdateEventListener > > > >> > public void OnSaveOrUpdate(SaveOrUpdateEvent @event) > > > >> > { > > > >> > var trackable = @event.Entity as ITrackModificationDate; > > > >> > if (trackable != null) > > > >> > { > > > >> > trackable.LastModified = CurrentDateTimeProvider(); > > > > >> > } > > > >> > } > > > > >> > and IFlushEntityEventListener > > > >> > public void OnFlushEntity(FlushEntityEvent @event) > > > >> > { > > > >> > if(@event.EntityEntry.Status == Status.Deleted) > > > >> > { > > > >> > return;} > > > > >> > var trackable = @event.Entity as ITrackModificationDate; > > > >> > if (trackable != null) > > > >> > { > > > >> > trackable.LastModified = CurrentDateTimeProvider(); > > > > >> > } > > > >> > } > > > > >> > As you can see, using right events you don't need to use NH internals > > > >> > state. > > > > >> > For collection you have another set of events. In general *you > > > >> > shouldn't > > > >> > initialize a collection* in an NH's event. > > > > >> > 2011/5/6 Krzysztof Ko¼mic <[email protected]> > > > > >> > > I'm using Oracle database. > > > >> > > I have a IPreUpdateEventListener and IPreInsertEventListener which > > > >> > > set > > > >> > > CreatedBy and UpdatedBy properties on some of the entities. > > > > >> > > Those properties point to another entity Person which is assigned > > > >> > > in > > > >> > > the > > > >> > > listeners via Session.Load<> > > > > >> > > this all used to work quite nice when I had my POID generator > > > >> > > specified as > > > >> > > "sequence-identity" (we use sequences in Oracle) > > > > >> > > today I tried to switch POID generator to "sequence" which would > > > >> > > allow > > > >> > > me > > > >> > > to utilize batching which I also enabled. > > > > >> > > Here's where I started getting this exception: > > > > >> > > collection: [Person.FooBars] was not processed by flush() > > > > >> > > the exception happens only when the Session.Load<> in my event > > > >> > > listeners > > > >> > > doesn't already have the Person I'm requested accessible (that is > > > >> > > only > > > >> > > when > > > >> > > Load<Person> returns a proxy). If I load the person beforehand (and > > > >> > > not in > > > >> > > the listener) the exception does not occur. > > > > >> > > Any ideas what the reason for that is and how do I fix it? > > > > >> > > Krzysztof > > > > >> > > -- > > > >> > > 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. > > > > >> > -- > > > >> > Fabio Maulo > > > > > -- > > > > 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. > > > > -- > > > Enviado desde mi dispositivo móvil -- 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.
