You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by "KARR, DAVID (ATTSI)" <dk...@att.com> on 2010/06/04 18:19:52 UTC

Issues mapping int column to generic enum, where column value is not enum ordinal

Using OpenJPA 1.2.2.

I'm still struggling with how I can effectively map integer columns to
an enum type.  It's easy enough when the type is used for only a single
column, as I just define a value handler for my strategy.  It would also
probably be easy if my column values corresponded to the ordinals of the
enum values.  This is not the case.

I designed my enum type so the corresponding column value is specified
in the constructor.  I also defined a "EnumColumnValue" interface that
my enum type implements that defines the "getColumnValue()" method.  I
also defined a "EnumColumnValueHandler" to use as the strategy, which
knows about the column values.  This seems sound so far, although I
haven't been able to get this to execute yet.

My problem right now happens when I try to build and execute a query
that looks for a particular enum value. When I specify the enum value as
a parameter, what gets put into the SQL is the ORDINAL of the enum
value, so it looks for the wrong value.  I tried setting the parameter
using the "getColumnValue()" method of the EnumColumnValue, but that
fails, as it expects a value of the enum type, not integer.

How can I make the generated SQL use the supplied column value of the
EnumColumnValue, instead of the ordinal value?

Am I going to have to make some compromises to get this to work?

RE: Issues mapping int column to generic enum, where column value is not enum ordinal

Posted by "KARR, DAVID (ATTSI)" <dk...@att.com>.
> -----Original Message-----
> From: KARR, DAVID (ATTSI)
> Sent: Friday, June 04, 2010 9:20 AM
> To: users@openjpa.apache.org
> Subject: Issues mapping int column to generic enum, where column value
> is not enum ordinal
> 
> Using OpenJPA 1.2.2.
> 
> I'm still struggling with how I can effectively map integer columns to
> an enum type.  It's easy enough when the type is used for only a
single
> column, as I just define a value handler for my strategy.  It would
> also
> probably be easy if my column values corresponded to the ordinals of
> the
> enum values.  This is not the case.
> 
> I designed my enum type so the corresponding column value is specified
> in the constructor.  I also defined a "EnumColumnValue" interface that
> my enum type implements that defines the "getColumnValue()" method.  I
> also defined a "EnumColumnValueHandler" to use as the strategy, which
> knows about the column values.  This seems sound so far, although I
> haven't been able to get this to execute yet.
> 
> My problem right now happens when I try to build and execute a query
> that looks for a particular enum value. When I specify the enum value
> as
> a parameter, what gets put into the SQL is the ORDINAL of the enum
> value, so it looks for the wrong value.  I tried setting the parameter
> using the "getColumnValue()" method of the EnumColumnValue, but that
> fails, as it expects a value of the enum type, not integer.
> 
> How can I make the generated SQL use the supplied column value of the
> EnumColumnValue, instead of the ordinal value?
> 
> Am I going to have to make some compromises to get this to work?

If it matters, I was able to get this to work.  There are always little
details that have to be right, and I was missing some of them, but the
basic idea works fine.  In my EnumColumnValueHandler, the Map keys are
the "getColumnValue()" values, not the ordinal values.  I also have to
have each cooperating enum type implement a "EnumColumnValue" interface.