DBFlute-1.2.0 Released
Java8対応のDBFluteのリリース。
DBFlute-1.2.0 です。
Change Log | DBFlute
(移行の注意点は特になし)
かなり状況特化の修正ばかりですが、
いつかその状況が来るかもしれません(^^
主な修正ポイント
SchemaPolicyCheckの結果がSchemaHTMLに
SchemaPolicyCheckのviolationの結果は、今までコンソールのログにしか出力されていませんでしたが、SchemaHTMLトップに表示されるようになります。
HTML上の見やすい場所で確認ができるというだけでなく、仮にviolationが存在したままコミットされたとしてもすぐに他の人が気付けるようになります。
SpecifyColumnRequiredのwarningOnlyオプション
SpecifyColumnを必須にするオプションのオプションとして、例外で落とすのではなく、warningログだけ出力して続行できるようにしました。
現場からの要望で、本番環境では例外で落ちないようにしたいとのこと。万が一漏れてもサービスが落ちないようにと。
もちろん、SpecifyColumnを必須にしているからにはいつかは修正したいのでwarningログを。
これは、DBFluteConfigだけで設定ができます。固定的にwarningOnlyにするケースはないだろうということで、本番環境かどうかを確認して設定するという感じです。
更新時にミリ秒を切り取るオプション
insert(), update()などの更新時にミリ秒を切り取るオプションを追加ました。
主にMySQLにおいて、ミリ秒精度なしのDATETIME型を利用している場合、JavaのLocalDateTimeはミリ秒を持っているので、そこにギャップが生まれます。
ミリ秒が切り捨てなら問題ないですが、MySQLのJDBCドライバでは四捨五入されます。すると、アプリとして予期せぬ挙動をする可能性があります。
https://twitter.com/jflute/status/435066083297357825
MySQLのJDBCドライバを アップグレード(5.1.12 to 5.1.26)したら、 datetime型に対するTimestampのミリ秒の扱いが 切り捨てから四捨五入に変わったでござるよ。。。 悲しませてください。
そもそも、ミリ秒の切り捨て・四捨五入に依存するようなロジック自体がレアで、依存しないように作ったほうが良いというのはありますが、時々仕方なく存在することもあるでしょう。
そこで、DBFlute側で統一的に切り捨てられるようにしました。
littleAdjustmentMap.dfprop にて...
isDatetimePrecisionTruncationOfUpdatedEntity = true
とすると、Behaviorクラスにてfilter処理がかかります。
(自動生成すると差分が発生します)
ちなみに、もともと ConditionBean の条件値で切り捨てるオプション isDatetimePrecisionTruncationOfCondition がありました。これの登録・更新版です。