MySQLとS2DAOで

ちょっとはまったことがあったので、メモ。
MySQLでTIMESTAMP型の列を作成した際に、Java側では java.sql.timestamp型で受け取ることになるのですが、null値の扱いが異なることが判明しました。
MySQLのTIMESTAMP型では、null値は保存できず nullで書き込みを行うと現在の日時が登録されます。その代わり、0値を保存しておくことが可能です。
しかし、Javaの timestamp型はDate型を継承しているため 1970/1/1 originのミリ秒で値を扱う&null値を扱えるため、0値とnull値の扱いで整合性がとれなくなってしまいました。
ひとまずの回避手段として、MySQLのTIMESTAMP型の列には 0値を保存しないことにしました。実際の日時を扱っている限りでは問題が起きないので、MySQLを直接触って 0値を入力しない限りはこの症状を回避できています。

ググったところ、S2Dao+MySQLでのTimestampの扱い - まとばと! を見つけました。この修正を行えば SQLRuntimeExceptionを見ないで済むようですね。