Hi--

First, really enjoying iBatis 3. Thanks to all who have obviously thought and worked hard on this lovely framework. I am using it in combination with Guice 2.0 at the moment and enjoying it.

The only item that is a bit of a nuisance for me right now are situations that result in "JDBC requires that the JdbcType must be specified for all nullable parameters". Sometimes NULL values are desirable or needed in practice, and it's a bit of a bummer for any nullable column to be kind of relegated to a second-class citizen in terms of simplicity and conciseness in mapper files/classes.

At first read of the documentation I thought that I would only need to provide the jdbcType when I provided a null value *and* the java type was unknown to iBatis. This was not the fault of the documentation, just optimistic reading on my part. :)

That said, and without having investigated the source (though I would be willing for sure) it does seem confusing to me that iBatis is not able to provide the jdbcType for me in situations when I am passing a Bean or POJO as my parameter.

I read the linked doc about PreparedStatement.setNull() and so I do understand why iBatis needs the jdbcType. It just seems to me that this information would be available to iBatis at this point via reflection of the Bean/POJO. I guess in my mind I am assuming that this sort of reflection is already going on anyway at this point; but maybe not, maybe the type detection is strictly by value rather than via reflection?

As currently implemented, as a practical matter you likely have to provide the jdbcType for any column that accepts nulls in the DB, which is a bit time consuming and (IMO) undermines the brevity and elegance of the mappers. One *could* choose to provide the jdbcType only for those nullable columns that will actually get assigned a null at runtime, but that requires more foresight than may be possible at the time... and becomes one more thing to forget about and thus introduce application bugs down the line.

Does anyone know if what I'm wishing for is fundamentally impossible for some reason, or perhaps was just considered too complicated or costly to implement at this time?

I'm not expecting anyone to jump up and do a bunch of work for me of course (I'm standing on shoulders as it is). Perhaps an implementation of something reflection based for these cases is something I could contribute, if anyone felt it was fundamentally feasible and desirable. So as not to introduce undesired runtime cost, I suppose there could be a switch at the insert/select/update/etc level that said whether to use reflection

Of course, I may be missing the point somewhere, been known to happen.

Thanks again,
nate



---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org
For additional commands, e-mail: user-java-h...@ibatis.apache.org

Reply via email to