ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeff Butler" <jeffgbut...@gmail.com>
Subject Re: abator and class hierarchy
Date Tue, 01 Jul 2008 20:36:12 GMT
Yep - that's the idea.  I agree about the "magic" - comment heavily.

iBATIS is instantiating the new objects here, so you have to do it the
iBATIS specific way.

As for the general question, I can't think of a more general way to do this
- but I am far from the final authority on Java practices.  This is partly
what the FactoryMethod pattern is all about - you just have to make sure
that you are using factories when creating objects.

Jeff Butler



On Tue, Jul 1, 2008 at 3:14 PM, David Evans <dsevans@berndtgroup.net> wrote:

> Hi Jeff,
>
> Thanks for the tip. Is this the general idea?
>
> public Object createInstance(String stmtId, Class clazz) {
>  String className = clazz.getName();
>  if (className.startsWith("com.test.model.abator")) {
>     className = className.replaceFirst("\.abator","");
>     Object obj = Resources.instantiate(className);
>     return obj;
>  }
>
>  return null;
>
> }
>
> So the sqlMap file would still say:
> resultMap class="com.test.model.abator.Account"
>
> but would actually return a com.test.model.Account object?
>
> This seems like a good solution, although the "magic" of that class
> conversion seems a little opaque if someone else had to maintain the
> code. I guess commenting heavily could help. Do you know of any
> non-ibatis specific way to create a subclass from an instance of a
> superclass?
>
> Thanks for the help,
>
> Dave
>
>
>
> On Tue, 2008-07-01 at 13:36 -0500, Jeff Butler wrote:
> > You could use iBATIS' ResultObjectFactory.  When iBATIS asks for a new
> > com.test.model.abator.Thing, you could return com.test.model.Thing.
> >
> > Jeff Butler
> >
> >
> >
> > On Tue, Jul 1, 2008 at 1:16 PM, David Evans <dsevans@berndtgroup.net>
> > wrote:
> >         Hello,
> >
> >         Apologies, This post is slightly off topic, as it has to do
> >         with java
> >         class hierarchy, but i'm hoping someone here will have solved
> >         the same
> >         problem.
> >
> >         I have set up abator to create my sqlmaps, model and spring
> >         dao classes.
> >         I would like to use these generated model classes as base
> >         classes for
> >         more fully featured business objects. my situation looks like
> >         this:
> >
> >         com.test.model.abator.Thing (generated by abator)
> >         com.test.model.Thing extends com.test.model.abator.Thing
> >
> >         Now my Thing model never has to worry about the field getters
> >         and
> >         setters mirroring the database table.
> >
> >         When using the dao classes, i have a problem. For updates and
> >         inserts,
> >         everything is fine, i can pass the com.test.model.Thing to the
> >         dao and
> >         it accepts it of course, because it extends
> >         com.test.model.abator.Thing.
> >         but on a select the dao returns me a
> >         com.test.model.abator.Thing, which
> >         I cannot cast to a com.test.model.Thing. I can't think of a
> >         way to
> >         create a new com.test.model.Thing from a
> >         com.test.model.abator.Thing
> >         without duplicating all of the fields. If i have to create a
> >         constructor
> >         which explicitly transfers all of the field values then i lose
> >         the
> >         entire point of my abator setup.
> >
> >         Thanks,
> >
> >         Dave
> >
> >
>
>

Mime
View raw message