Re: Cloning a CayenneDataObject

From: Andrey Razumovsky (razumovsky.andre..mail.com)
Date: Tue Feb 10 2009 - 03:25:38 EST

  • Next message: Michael Gentry: "Re: Encrypted Fields"

    Hi Paul,

    Do you need to clone only the object's attributes (i.e. fields from one DB
    table) or you need to clone related objects too? If first, I'd recommend to
    iterate through ObjEntity attributes and write their values to new object.
    Tell me if you need a snippet.
    If second, since you likely don't want to clone *all* relationships, because
    this might result in cloning all database, you should write a clone method
    which clones only rels specified in DataObject, e.g.

    interface CayenneCloneable {
       public List<String> getClonedRelationships();
    }

    class Artist extends _Artist implements CayenneCloneable {
      ...
    }

    //somewhere
    public static <T extends CayenneDataObject> T clone(T src) {
      //iterate through obj attributes

      if (T instance of CayenneCloneable) {
         //recursively clone relationships
      }
    }

    That's how I've done it, and I can search my projects for an example if you
    want it

    Regards,
    Andrey

    2009/2/9 Paul Logasa Bogen II <pl..amu.edu>

    > I am writing a web application with Wicket on the front end and Cayenne on
    > the back end. When a user clicks "Save As" in my application I want to save
    > the current working object with a new key. My suspicion is if I just blank
    > out the key and do a context.commitChanges() I will just change the key and
    > any other information for the object instead of creating new rows in the
    > database. Is this correct? And what is the recommended way to clone or copy
    > an object to a new one?
    >
    > plb
    >



    This archive was generated by hypermail 2.0.0 : Tue Feb 10 2009 - 03:26:12 EST