自定义Typehandler用于不同的结果属性

时间:2014-06-17 01:17:28

标签: java biginteger ibatis

我正在使用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);
}

我所知道的是,二传手的第二行正在产生冲突,但我不知道为什么。有人可以帮帮我吗?

提前致谢。

安。

0 个答案:

没有答案