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とかにしてしまうのが一番っぽい。