let me check API doc[?]

2009/7/21 Fabio Maulo <[email protected]>

> Dirty entities are in the PersistentContext (I don't remember if it is
> visible from ISession or ISessionImplementor)
> 2009/7/21 Matt Lund <[email protected]>
>
>
>> OK...  I suspected as much but wanted to be sure...
>>
>> So tell me this...  Is there some way I can programmatically get the
>> list of dirty entities from the old session?  I looked to see if there
>> was something like ISession.GetDirtyEntities() but didn't see
>> something like this.
>>
>> I'll tell you why I ask...  It seems like I'm dealing with one of two
>> scenarios when I get a StaleObjectStateException.  Scenario A is that
>> a DB row was modified since I read it but the modified fields are
>> different from the fields I've modified (there's no conflict).
>> Scenario B is that a DB row was modified since I read it and once or
>> more of the modified fields corresponds to a field I've modified (and
>> the values are different) - this is a conflict.
>>
>> It seems like after I get a StaleObjectStateException I could call a
>> handy method that would:
>>
>> 1. Create a new session
>> 2. For each dirty object in the old session:
>>         a. Read the entity into the new session and determine if
>> there's a "conflict" (if so, return CONFLICT)
>>         b. Merge the changes made in the db with the changes made in
>> the old session.
>>
>> So in the case of Scenario A I can now continue on my merry way.  In
>> the case of Scenario B I can decide how to deal with the conflicts.
>>
>> Does this seem possible?  My first step will be to figure out how to
>> get the collection of dirty entities out of the old session - is there
>> a way to do this?
>>
>> Thanks!
>>
>> On Jul 21, 11:32 am, Fabio Maulo <[email protected]> wrote:
>> > For StaleObjectStateException you should throw the session, open a new
>> one,
>> > use session.Merge to reattach entity, continue working.
>> >
>> > 2009/7/21 Matt Lund <[email protected]>
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > > I did searching on this forum and couldn't find an answer to my
>> > > question, but my apologies if it's already been answered.
>> >
>> > > I want to understand how to deal with recovering from a
>> > > StaleObjectStateException in a simple scenario.
>> >
>> > > Suppose the following occur in this order.  Session 1 is occuring on
>> > > thread 1 and Session 2 is occuring on thread 2.
>> >
>> > > 1. Session 1 loads entity a1 of type A, entity b1 of type B, and
>> > > entity c1 of type C
>> > > 2. Session 2 loads entity c2 of type C
>> > > 3. Session 1 modifies properties of a1, b1, and c1
>> > > 4. Session 2 modifies properties of c2
>> > > 5. Session 2 flushes and commits
>> > > 6. Session 1 flushes and commits
>> >
>> > > At step 6 I can clearly expect a StaleObjectStateException.  When this
>> > > occurs I try to:
>> >
>> > > 7. Evict c2 from session 1
>> > > 8. Load c2 on session 1
>> > > 9. Re-apply changes to c2
>> > > 10. Flush session 1
>> >
>> > > But I get StaleObjectStateException on 10 as well.
>> >
>> > > So in lieu of the evict/load in steps 7-8 I tried a few other things
>> > > that didn't work either.  I tried a refresh (same outcome).  And I
>> > > tried an evict & refresh (same outcome).
>> >
>> > > The only success I've had is when, as a result of the
>> > > StaleObjectStateException on step 6, I clear the session and re-do
>> > > steps 1,5.
>> >
>> > > The conclusion I'm reaching is that once I get a
>> > > StaleObjectStateException, nothing can be done to simply treat c1 and
>> > > get to a point where I can attempt to flush the session again.  Is
>> > > this the case?
>> >
>> > --
>> > Fabio Maulo
>> >>
>>
>
>
> --
> Fabio Maulo
>



-- 
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
-~----------~----~----~----~------~----~------~--~---

<<inline: 360.gif>>

Reply via email to