cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: UUID as primary key
Date Sat, 22 Jul 2006 02:37:07 GMT
I see. That makes sense - each DataContext in a nested context chain  
would create its own instance of object and transition it through the  
lifecycle. So technically it is still called once per object  
instance. However the fact that ID can be passed from a peer object  
in the upstream context requires an extra check. E.g.:

  public void setPersistenceState(int state) {
    super.setPersistenceState(state);

    if (state == PersistenceState.NEW && getObjectId() == null) {
      setId(UUID.randomUUID());
    }
  }

Andrus

On Jul 21, 2006, at 5:35 PM, Øyvind Harboe wrote:

> On 7/13/06, Andrus Adamchik <andrus@objectstyle.org> wrote:
>>
>>
>> On Jul 13, 2006, at 12:32 PM, Øyvind Harboe wrote:
>>
>> > On 7/12/06, Gentry, Michael (Contractor)
>> > <michael_gentry@fanniemae.com> wrote:
>> >> You could override setPersistenceState() in your Treatment class:
>> >>
>> >> public void setPersistenceState(int state)
>> >> {
>> >>   super.setPersistenceState(state);
>> >>
>> >>   // If object was just created, set PK
>> >>   if (state == PersistenceState.NEW)
>> >>     setId(UUID.randomUUID());
>> >> }
>> >
>> > Hmmm... I tried that, but setPersistanceState() is invoked  
>> multilple
>> > times with state=NEW and thus I'm changing the UUID each time. That
>> > can't be right.
>>
>> No it can't - it should only be invoked once per object.
>
>
> As far as I can tell in the debugger setPersistanceState(state=NEW)  
> is being
> invoked multiple times..
>
> First when I create the object and then later on when I commit 
> (there are
> child contexts involved, and I first commit to parent, then to the
> database):
>
>
>        if (dataObject.getObjectId() == null) {
>            dataObject.setObjectId(new ObjectId(objEntity.getName 
> ()));  //
> DataContext.registerNewObject(DataObject) line: 920
>        }
>
>
>
> Treatment(Workaround).setPersistenceState(int) line: 31
> DataContext.registerNewObject(DataObject) line: 920
> ChildDiffLoader.nodeCreated(Object) line: 110
> NodeCreateOperation.apply(GraphChangeHandler) line: 73
> CompoundDiff.apply(GraphChangeHandler) line: 133
> ObjectStoreGraphDiff.apply(GraphChangeHandler) line: 155
> DataContext.onContextFlush(ObjectContext, GraphDiff, boolean) line:  
> 1215
> DataContext.onSync(ObjectContext, GraphDiff, int) line: 1194
> DataContext.flushToParent(boolean) line: 1261
> DataContext.commitChanges() line: 1165
> EditTreatment$Enhance_217(EditTreatment).submit(IRequestCycle)  
> line: 142
>
>
>
> -- 
> Øyvind Harboe
> http://www.zylin.com


Mime
View raw message