Play Frameworkで最新のplay-ebeanモジュールを使用する際の注意

Play Framework 2.8とplay-ebeanモジュールの6.2.0-RC4以降のバージョンを使用する場合、破壊的な変更があるため注意。

参考 play-ebean 6.2.0-RC4(https://github.com/playframework/play-ebean/releases/tag/6.2.0-RC4)

play-ebeanモジュールの6.2.0-RC4以降のバージョンではPlay enhancerの同梱が削除された。

6.2.0-RC4より前のバージョンでは、モデルクラスのフィールドがpublicとなっていた場合、直接フィールドを書き換えてからinsert()メソッドやupdate()メソッドで登録・更新が可能であったが、6.2.0-RC4以降はこの動作ができなくなる。

実際の挙動とすると、insert()メソッドを呼び出したときは値を設定したフィールドが問題なく登録されるのだが、update()メソッドを呼び出した時にはフィールドの変更があったとしても変更された判定とならず、そもそもUPDATE文のSQLが実行されない。

markAsDirty()メソッドを呼んで強制的にUPDATE文を実行させようとしても、そもそも更新日時の列とバージョンの列しか更新されないという挙動となってしまう。

6.2.0-RC4以降では、モデルのフィールドは全てprivateとし、getter・setterのメソッドを自前で作成しそれを使用する必要がある。
setter経由で値を更新すれば、問題なくUPDATE文が実行される。

getter・setterを自前で作成するのが面倒な場合は、Lombokを併用することでこの手間を軽減することができる。