You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by roberto <ro...@theaegis.org> on 2004/12/31 08:25:25 UTC
iBATIS.NET Binder suggestion with Oracle selectKey (quick fix)
Gilles,
Luke's Binder suggestion as posted on SourceForge did work, however as he
mentioned, there should be a better way without throwing out type safety.
I went through the code for getting selectKeys and noticed the similarity
with QueryForObject since they both go through
MappedStatement.ExecuteQueryForObject() and
MappedStatement.ApplyResultMap().
I ended up finding why both QueryForObject() and using a selectKey return a
System.Decimal when using Oracle even if the resultClass is specified as int
(or string or anything else). The generated ResultProperty for a primitive
resultClass didn't have a TypeHandler specified, so the resulting object was
being handled by grabbing the db/provider type.
Thankfully, it's a quick fix! :-)
Here's the area in MappedStatement.ApplyResultMap() (lines 383 to 392...the
"property.TypeHandler..." line is the fix):
// Check if the ResultClass is a 'primitive' Type
if (Type.GetTypeCode(outObject.GetType()) != TypeCode.Object)
{
// Create a ResultProperty
ResultProperty property = new ResultProperty();
property.PropertyName = "value";
property.ColumnIndex = 0;
property.TypeHandler =
TypeHandlerFactory.GetTypeHandler(outObject.GetType());
SetObjectProperty(request, request.ResultMap, property, ref
outObject, reader);
}
This should hopefully resolve any weird errors others may be getting when
specifying a primitive result class but not actually getting the object of
that type. Haven't heard many complaints though! hehe
Roberto
RE: iBATIS.NET Binder suggestion with Oracle selectKey (quick fix)
Posted by Gilles Bayon <gi...@laposte.net>.
Added the fix in SVN.
-----Message d'origine-----
De : roberto [mailto:roberto@theaegis.org]
Envoyé : vendredi 31 décembre 2004 08:25
À : ibatis-dev@incubator.apache.org
Objet : iBATIS.NET Binder suggestion with Oracle selectKey (quick fix)
Gilles,
Luke's Binder suggestion as posted on SourceForge did work, however as he
mentioned, there should be a better way without throwing out type safety.
I went through the code for getting selectKeys and noticed the similarity
with QueryForObject since they both go through
MappedStatement.ExecuteQueryForObject() and
MappedStatement.ApplyResultMap().
I ended up finding why both QueryForObject() and using a selectKey return a
System.Decimal when using Oracle even if the resultClass is specified as int
(or string or anything else). The generated ResultProperty for a primitive
resultClass didn't have a TypeHandler specified, so the resulting object was
being handled by grabbing the db/provider type.
Thankfully, it's a quick fix! :-)
Here's the area in MappedStatement.ApplyResultMap() (lines 383 to 392...the
"property.TypeHandler..." line is the fix):
// Check if the ResultClass is a 'primitive' Type
if (Type.GetTypeCode(outObject.GetType()) != TypeCode.Object)
{
// Create a ResultProperty
ResultProperty property = new ResultProperty();
property.PropertyName = "value";
property.ColumnIndex = 0;
property.TypeHandler =
TypeHandlerFactory.GetTypeHandler(outObject.GetType());
SetObjectProperty(request, request.ResultMap, property, ref
outObject, reader);
}
This should hopefully resolve any weird errors others may be getting when
specifying a primitive result class but not actually getting the object of
that type. Haven't heard many complaints though! hehe
Roberto
--
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.296 / Virus Database: 265.6.7 - Release Date: 30/12/2004
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.296 / Virus Database: 265.6.7 - Release Date: 30/12/2004