Screaming Loud

日々是精進

slickのupdateで動的にクエリを作れなくてハマった

slickでは、SQLを書かずにクエリを投げられます。

その書き方に関しては、
Coming from SQL to Slick — Slick 2.1.0 documentationに書いてあります。

ただ、少し違ったことをしようとするとなかなか実現できません。

今回実現しようとしていたこと

update文でcase classに値が入っているカラムだけ更新

実装

何も考えずに実装すると、下記のようになると思います。

ただ、このままだとcase classに値を埋めていないと、
埋めていないカラムがnullで更新されてしまいます。

解決策

これを解決するために、以下のような実装をしました。

Javaのリフレクションを使ってかなり強引ですが、
一応やりたかったことは実現できました。

ただ、型チェックもなかったりであまりおすすめではありません。

slickの思想として、DAOレイヤーでゴニョゴニョしないで、ロジックでcase classを操作しろってことなんでしょうか?

他にいい方法はあれば、教えてください!