iBatis+MySQL BigIntegerの怪
MySQLのBigIntegerをiBatisで扱った時の不思議現象。
桁数でかいのでjava側での受け取りにjava.math.BigIntegerを使いました。
こんな感じ↓
<resultMap id="extResult" class="jp.co.data.Picture" extends="pkResult"> <result column="file_size" property="fileSize" jdbcType="BIGINT(22)" /> </resultMap>
public class Picture { private Object fileSize; public Object getFileSize() { return this.fileSize; } public void setFileSize(Object fileSize) { this.fileSize = fileSize; } }
使うとき。(insert)
Picture picture = new Picture(); picture.setFileSize(BigInteger.valueOf("123456789"));
これで何事も無くできていたのですが、Updateだけ駄目だった。
com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred while applying a parameter map. --- Check the picture.update-InlineParameterMap. --- Check the parameter mapping for the 'fileSize' property. --- Cause: java.lang.NullPointerException
ちなみに落ちている理由はBigIntegerのカラムがNotNullだから。
BigIntegerでセットしてupdateってやるとどうやらデータ読み取ってくれないみたいで。
「NotNull指定なのになんで空なんだYO」とぬるぽ出して怒ってらっしゃってる。(多分)
Insertでは問題なかったのに何でだろうね?
ちなみにresultMapにjavaType=java.math.BigIntegerとか指定したりもしたんですが、それやると今度は今まで大丈夫だったselectもinsertも全滅だった。
何なんだ。。
一応IntegerとLongを指定してあげると何事も無く全部成功するんですが、桁数があってないので使えない。
くまった。
とりあえず力押し、って事でDelete/Insertで回避。
根本解決に至らず。
ソースコードひっくり返すしかないかなぁ。。