Handling uncommitted objects with relations? (3.0M3)

From: Andreas Pardeike (a..sys.se)
Date: Thu Mar 20 2008 - 04:55:26 EDT

  • Next message: Marcin Skladaniec: "Re: Handling uncommitted objects with relations? (3.0M3)"

    Hi,

    I just started my second cayenne related project and found that I am
    doing
    the same "workaround" that I did on the first one. Now I wonder if
    there is
    a better way to do it:

    My apps usually have a shopping basket BASKET with a simple relation
    to i.e.
    BOOKS (via BASKET.isbn -> BOOKS.isbn). Now, I want customers to be
    able to add
    to the basket without being logged in and so my basket rows might not be
    committed to the database unless the user logs in. At that point my
    session
    which holds all uncommitted basket rows will load in existing basket
    rows from
    the db and commit.

    All this only works if I add the following overwrite to my super
    Basket class.
    Not a very nice way but proven and stable. Is there a less manual way
    to do this?

    /Andreas Pardeike

    public class Basket extends _Basket
    {
       // we need to fetch the Book relation manually otherwise transient
    baskets
       // will fail to resolve getBook()

      ..verride
       public void setISBN(String isbn)
       {
         super.setISBN(isbn);

         Books book = DataObjectUtils.objectForPK(getObjectContext(),
    Books.class, isbn);
         if(book != null)
           setBook(book);
       }
    }

    and here's how I add a basket row:

    Basket row = _context.newObject(Basket.class);
    row.setISBN(newISBN);
    row.setLogin(_login == null ? "" : _login);
    ...
    if(_login != null)
       _context.commitChanges();



    This archive was generated by hypermail 2.0.0 : Thu Mar 20 2008 - 04:56:04 EDT