RE: Clone an Object and Create New PK

From: Steve Wells (stwell..wnmail.net)
Date: Thu Mar 25 2004 - 19:39:27 EST

  • Next message: Steve Wells: "Object Metadata"

    You could try jakarta commons BeanUtils.copyProperties(...)
    I havent done this myself but something like...

       Artist a = getArtistSomehow("monet");
       Artist a2 = (Artist ) dataCtx.createAndRegisterNewObject("Artist");

       BeanUtils.copyProperties(a2, a);

    ...might work

    ----- Original message -----
    From: "Bret Gregory" <bret.gregor..ccesspointinc.com>
    To: "'Mike Kienenberger'" <mkienen..laska.net>, "Bret Gregory"
    <bret.gregor..ccesspointinc.com>
    Date: Thu, 25 Mar 2004 12:58:33 -0500
    Subject: RE: Clone an Object and Create New PK

    Well, it doesn't look like cloning an object manually will be all that
    difficult.
    I am however running into an issue with the 'writePropertyDirectly'
    method
    on CayenneDataObject.

    My basic code is below:

        Iterator keys = oldObj.getCurrentSnapshot().keySet().iterator();
        while(keys.hasNext()) {
          String key = (String)keys.next();
          newObj.writePropertyDirectly(key, attr.get(key));
        }

    However the insert statement is all nulls. Unfortunately the
    writeProperty
    which the auto generated classes use has protected status. Am I
    misunderstanding what the writePropertyDirectly method does? Is there a
    way
    around this without reflecting over the class to get and execute the
    methods
    that I want?

    -----Original Message-----
    From: Mike Kienenberger [mailto:mkienen..laska.net]
    Sent: Tuesday, March 23, 2004 4:51 PM
    To: Bret Gregory
    Cc: 'cayenne-use..bjectstyle.org'
    Subject: Re: Clone an Object and Create New PK

    Bret Gregory <bret.gregor..ccesspointinc.com> wrote:
    > I was wondering if there was an easy way to create duplicate objects
    > with their relationships while creating new auto_generated primary
    > keys.
    >
    > I have a table with a 1:n relationship to itself.
    > So an Object can be related to a bunch of other objects.
    >
    > I would like to clone the parent object and all of its ancestors
    > without having to manually copy all of their different attributes and
    relationships.
    > Does anyone know of an easy way to do this?

    I don't know if there's Cayenne-specific support for cloning objects.

    I know that under WebObjects I did this by creating a new data object,
    copying the source data object's attributes to the new data object using
    generic data object methods, then creating Entity-specific code for
    rebuilding relationships.

    I used a Map of Maps to track created objects so I could assign the
    proper
    relationships, since all of the objects (many different Entity types) had
    to

    be created before the relationships could be reset.

    I can give you some specific WebObject code examples of this if you end
    up
    having to go the same route.
    The API for Cayenne should be similar enough for it to be useful.

    Copying objects without relationships is pretty trivial, but once you
    have
    to deal with relationships, things get complicated very quickly.

    -Mike

    -- 
    http://www.fastmail.fm - A fast, anti-spam email service.
    



    This archive was generated by hypermail 2.0.0 : Thu Mar 25 2004 - 19:39:30 EST