mirage-scalaでエンティティを使った更新を行う場合

mirage-scalaではケースクラスをエンティティとして使うことができるのですが、「DBを検索」→「一部のプロパティを変更」→「更新」みたいなことをやりたいときはケースクラスのcopyメソッドを使用するとよさげです。

case class Book(
  @(PrimaryKey @field)(generationType = IDENTITY)
  bookId: Pk[Long],
  bookName: String,
  author: String,
  price: Option[Int])

変更したいプロパティだけ渡し、それ以外は元のエンティティのプロパティをコピーしたインスタンスを簡単に作ることができます。

// 検索してエンティティを取得
val id: Long = ...
val book = sqlManager.findEntity[Book](id).get

// bookNameプロパティを変更して更新
sqlManager.updateEntity(book.copy(bookName = "Mirage in Action"))