Hi all,

I just ran into an interesting problem, and I'm curious whether I'm doing something wrong, or if it's a known limitation or bug in iBATIS (or its interaction with the JDBC driver?). I'm using iBATIS 2.3.0 with a PostgreSQL's jdbc driver 8.2-504.

Let's say I have the following classes:

// wrapper that attaches an attribute to things; a poor-man's mix-in class
class Wrapper<T>{
   String wrapperAttribute;
   T value;
   String getAttribute() { return wrapperAttribute;}
   T getValue() { return value; };
    // remaining bean accessors are defined but not shown
    // ...
}

// a class that uses the  wrapper:
class FooBean{
  Wrapper<String> wrappedString;
  Wrapper<Date> wrappedDate;
Wrapper<SomeEnum> wrappedEnum; // Enum and its TypeHandlerCallback are defined elsewhere, not shown
  // the obvious get/set accessors are defined below, not shown
  // ...
}
// end code

FooBean is then passed as a parameter to an insert statement, which looks, roughly, along the lines of:

<insert ... >
     INSERT INTO mytable ( string_field, date_field, enum_field )
     VALUES( #wrappedString.value#,
                     #wrappedDate.value#,
                     #wrappedEnum.value# )
</insert>

When trying to run the code, the #wrappedString.value# part of the statement works just fine, but for the #wrappedDate.value# I get an error: "PSQLException: Can't infer the SQL type to use for an instance of java.util.Date. Use setObject() with an explicitly Types value to specify the type to use."

Seeing this, I tried adding the jdbc type to the parameter map, as shown:
                     #wrappedDate.value:TIMESTAMP#
This produced the same exact error.

Then I tried adding a wrapper method,"Date getWrappedDateValue" which simply calls getWrappedDate().getValue(), and thus returns a Date object, but then I got the same error for the wrappedEnum...

Can anyone explain this? Is there a way to get this to work properly? I first thought that this has to do with Java's generic not preserving enough information for this to work, but as the error message clearly shows, the type info is retrievable...
Thanks for any insight!

-Vadim

Reply via email to