Michael,
May be the cayenne version, i forgot to mention i'm using cayenne-server-3.0M4.jar, because i needed the characteristics of this version.
The fact is that making the change from integer to char made it work.
Thanks
Hans
----- "Michael Gentry" <mgentr..asslight.net> escribió:
> That doesn't sound right to me ... I'm pretty sure you can use an
> integer and I also believe you can use an enum, too. I vaguely
> recall
> testing that at one point.
>
>
> On Fri, Mar 13, 2009 at 9:59 AM, <han..elinux.cl> wrote:
> > List,
> >
> > I'm answering myself, but may be of help to somebody.
> >
> > Finally i have found the problem: The Qualifier (or Discriminator)
> has to be of type character and not Integer.
> >
> > ...my first intent was to use integer in order to follow our local
> policies for enumerations.
> >
> > Hans
> >
> >
> > ----- han..elinux.cl escribió:
> >
> >> Dave,
> >>
> >> I've implemented the inheritance as the tutorial say, it worked
> fine,
> >> but the factory method still need to get the initial artist class
> to
> >> know the type, then ask cayenne again to give the right class to
> >> instantiate.
> >>
> >> I think there may be another way to get the object without doing
> this
> >> double call to objectForPK.
> >>
> >> public static Artist getArtist(String id) {
> >>
> >> if (id == null || id.equals(""))
> >> return null;
> >>
> >> DataContext context =
> DataContext.getThreadDataContext();
> >>
> >> Artist c = (Artist)
> DataObjectUtils.objectForPK(context,
> >> Artist.class, Integer.parseInt(id));
> >>
> >> if (c.getTipoEnum() == EnumTipoArtist.EXPERT)
> >> return (Artist)
> DataObjectUtils.objectForPK(context,
> >> ExpertArtist.class,
> Integer.parseInt(id));
> >> else
> >> return c;
> >> }
> >>
> >> Thanks
> >> Hans
> >>
> >> ----- "Dave Lamy" <davelam..mail.com> escribió:
> >>
> >> > 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
> >> > >
> >> > >
> >>
> >> --
> >> Hans Poo, WeLinux S.A.
> >> Oficina: 697.25.42, Celular: 09-319.93.05
> >> Bombero Ossa # 1010, Santiago
> >
> > --
> > Hans Poo, WeLinux S.A.
> > Oficina: 697.25.42, Celular: 09-319.93.05
> > Bombero Ossa # 1010, Santiago
> >
> >
-- 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 : Fri Mar 13 2009 - 10:49:59 EDT