我正在使用iBatis 2.0,我在2个BIGINT类型的属性中使用自己的typeHandler时遇到了问题。结果图如下:
<resultMap id="getList" class="Something">
<result property="property1" column="property1" jdbcType="BIGINT" javaType="java.math.BigInteger" typeHandler="BigIntegerTypeHandler"/>
<result property="property2" column="property2" jdbcType="BIGINT" javaType="java.math.BigInteger" typeHandler="BigIntegerTypeHandler"/>
</resultMap>
我正在使用的TypeHandler就是这个:
public class BigIntegerTypeHandler implements TypeHandlerCallback {
public Object getResult (ResultGetter getter) throws SQLException{
if(getter.wasNull()){
return null;
}
Object o = getter.getObject();
if(o instanceof BigDecimal){
BigDecimal bd = (BigDecimal) o;
return bd.toBigInteger();
}else if(o instanceof BigInteger){
return (BigInteger) o;
}else{
return o;
}
}
public void setParameter(ParameterSetter setter, Object parameter) throws SQLException{
if(parameter == null){
setter.setNull(Types.BIGINT);
}else{
BigInteger i = (BigInteger) parameter;
setter.setBigDecimal(new BigDecimal(i));
}
}
public Object valueOf(String s){
return s;
}
}
我在其他请求中使用过这种类型的处理程序,我没有任何问题(当它只是BigInt类型的一个属性时)。但是当我试图在 property1 和 property2 中使用它两次时,我收到了这个错误:
Exception in thread "main" com.ibatis.common.jdbc.exception.NestedSQLException:
The error occurred in myxmlfile.xml.
The error occurred while applying a result map.
Check the myxmlfile.getListBigInt.
The error happened while setting a property on the result object.
Cause: java.lang.RuntimeException: Error setting property 'property2' of '{dataId:438 property1:null property2:118 costo:0 isLoaded:false origenDestino:{0-0H:47571}'. Cause: java.lang.NullPointerException.
类 Something 的setter是:
public void setProperty1(BigInteger property1) {
this.property1 = property1;
this.property2 = new MagicObject(this.property1,this.property2);
}
我所知道的是,二传手的第二行正在产生冲突,但我不知道为什么。有人可以帮帮我吗?
提前致谢。
安。