Re: Factory method subclassing cayenne data objects

From: Dave Lamy (davelam..mail.com)
Date: Mon Mar 02 2009 - 12:26:50 EST

  • Next message: han..elinux.cl: "Re: Factory method subclassing cayenne data objects"

    Hey Hans--

    While I'm certain that the inheritance structure isn't data based to you, I
    imagine that Cayenne is going to HAVE to have a data value to know which
    subclass to instantiate. It's effectively going to get back a row from the
    Artist table and be asked to transform that row into an Artist object. How
    can it determine which kind? Through some sort of data analysis. Either a
    particular attribute value (ARTIST_TYPE) or via a linked table structure
    (don't think Cayenne supports that yet?). That data attribute should not be
    of particular importance to your application, however. It's just an ORM
    crutch.

    Dave

    On Mon, Mar 2, 2009 at 8:41 AM, <han..elinux.cl> wrote:

    > Michael,
    >
    > Thank you, i already saw it, but my intent was to make it entirely outside
    > cayenne mappings, the problem i need to solve is just behavioral, not data
    > based... by the way, it's not clear how to try the example using the
    > modeler: creating an empty class with no attributes or something.
    >
    > Hans
    >
    > ----- "Michael Gentry" <mgentr..asslight.net> escribió:
    >
    > > Is this what you are after?
    > >
    > > http://cayenne.apache.org/doc/handling-inheritance.html
    > >
    > >
    > > On Sun, Mar 1, 2009 at 7:46 PM, <han..elinux.cl> wrote:
    > > > Hi,
    > > >
    > > > I'm trying to implement a factory method pattern based on a cayenne
    > > data object.
    > > >
    > > > Say for example i have a class (cayenne based) called Artist, i want
    > > to make a subclass of Artist, say ExpertArtist that implements some
    > > specific behavior.
    > > >
    > > > Actually i have a big static Factory class that give me the all
    > > objects, i have a method like this:
    > > >
    > > > public static Artist getArtist(String id) {
    > > >
    > > > if (id == null || id.equals(""))
    > > > return null;
    > > >
    > > > DataContext context =
    > > DataContext.getThreadDataContext();
    > > >
    > > > Artist object = (Artist)
    > > DataObjectUtils.objectForPK(
    > > > context, Artist.class,
    > > Integer.parseInt(id));
    > > > return object;
    > > > }
    > > >
    > > > Obviously i can declare ExpertArtist as an subclass of Artist.
    > > >
    > > > package xxx.xxx;
    > > >
    > > > public class EspertArtist extends Artist {
    > > > public String getName() {
    > > > return super.getName() + " i'am expert !!";
    > > > }
    > > > }
    > > >
    > > > I've tried to instantiate an ExpertArtist, just modifying the
    > > Factory method, with no results. I don't know how to bouild the parent
    > > class calling super or something...
    > > >
    > > > Obviously these are not the real classes, the actual classes are
    > > really big and this solution: just modifying the factory method is the
    > > best for me.
    > > >
    > > >
    > > > Thanks
    > > > Hans
    > > >
    > > >
    > > >
    >
    > --
    > Hans Poo, WeLinux S.A.
    > Oficina: 697.25.42, Celular: 09-319.93.05
    > Bombero Ossa # 1010, Santiago
    >
    >



    This archive was generated by hypermail 2.0.0 : Mon Mar 02 2009 - 12:27:22 EST