Done: https://issues.apache.org/jira/browse/IBATIS-772
Thanks,
Gili
On 07/04/2010 9:54 AM, Clinton Begin wrote:
Null parameters are allowed, so we can't fail upon them. To maintain
compatibility with string based calls against map parameters, we don't
distinguish between a null keyed entry in the map and no keyed entry
at all.
I'd be willing to consider this change, but it's one of those things
that has always been true, and so some people might depend on this
behavior, especially those that don't use mapper interfaces.
If you like, file a feature request in Jira.
Clinton
On Tue, Apr 6, 2010 at 10:27 PM, cowwoc <cow...@bbs.darktech.org
<mailto:cow...@bbs.darktech.org>> wrote:
On 07/04/2010 12:09 AM, cowwoc wrote:
Hi,
I am getting an error message:
"JDBC requires that the JdbcType must be specified for all
nullable parameters [...] The error may involve <mapper
name>-Inline". Granted, telling me the mapper name is useful
but I believe we can improve this error message in two regards:
1. I mistakenly read "nullable parameters" as "nullable
columns" and wasted time looking for problems in my database
schema. I wonder if others have made a similar mistake...? Is
it possible to rephrase this as follows? "Mapper methods
cannot accept null arguments without a properly configured
JdbcType. Either specify a JdbcType or refrain from passing in
null."
2. I noticed that when this exception is thrown iBatis has
quite a bit more information available to it. Is it possible
to add the following information to the error message?
Prepared statement: "SELECT * FROM animals WHERE name = ? AND
age > ?", parameter #2 was null
This would enable me to track down exactly which parameter
was equal to null.
Thank you,
Gili
The error message turned out to be even more misleading than I
first expected. I had this code:
@Select("SELECT value FROM seat_properties WHERE seat = #{seat}
AND key = #{key}")
String get(short seat, String key);
I wrongly assumed that iBatis would grab the parameter names from
the method declaration. Instead, it names the parameters #{1},
#{2}, etc. When iBatis tried invoking this method, it couldn't
find #{seat} so it assigned it a null value and failed with the
aforementioned error message. I had to use the @Param annotation
to fix this:
@Select("SELECT value FROM seat_properties WHERE seat = #{seat}
AND key = #{key}")
String get(@Param("seat") short seat, @Param("key") String key);
Shouldn't iBatis fail-fast when the parameter it is looking up
("seat" in my case) is missing, as opposed to assigning it a null
value? A nice error message would be "Could not find parameter
#{seat}. The following parameters are defined: #{1}, #{2}." I
would have caught on fairly quickly with that error message.
Gili
---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org
<mailto:user-java-unsubscr...@ibatis.apache.org>
For additional commands, e-mail: user-java-h...@ibatis.apache.org
<mailto:user-java-h...@ibatis.apache.org>