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 <[EMAIL PROTECTED]>
> 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
>
>