S2Dao+MySQLでのTimestampの扱い

S2Dao+MySQLのTIMESTAMPのカラムにnullを入れようとすると現在日時が入ってしまう。どうもMySQLの仕様らしい。
TIMESTAMPのカラムにはNULLは入らないので0を入れろということらしい。
S2Daoでnullが指定された場合に0に変換する独自のValueTypeを書いて何とか解決。

MySQLTimestampType

public class MySQLTimestampType extends TimestampType {
  @Override
  public void bindValue(PreparedStatement ps, int index, Object value) throws SQLException {
    if (value == null) {
      ps.setInt(index, 0);
    } else {
      ps.setTimestamp(index, TimestampConversionUtil.toTimestamp(value));
    }
  }
}

dao.dicon

<component class="org.seasar.dao.impl.ValueTypeFactoryImpl">
  <initMethod>@org.seasar.extension.jdbc.types.ValueTypes@registerValueType(@java.sql.Timestamp@class,mySQLTimestampType)</initMethod>
</component>
<component class="hoge.MySQLTimestampType" name="mySQLTimestampType" />

でもDATEやTIMEの時にもJava側でTimestampを使っている場合はnullを指定しても0が入ってしまうのが難点。null不可でデフォルト0とかにしてしまうのが一番っぽい。