Play2.0を使用してデータベース内のオブジェクトを永続化するモデルと方法に関するベストプラクティスを探しています。私は、scalaを使用してPlay2.0のPlayとタイプセーフのサンプルを研究しました。
私が理解しているのは:
- モデルはケースクラスで定義されます
- すべての挿入/更新/削除/選択は、このケースクラスのコンパニオンオブジェクトで定義されています
したがって、Carオブジェクトを更新して新しい所有者を定義する必要がある場合は、次のことを行う必要があります。
val updatedCar = myCar.copy(owner=newOwner)
Car.update(updatedCar)
// or
Car.updateOwner(myCar.id.get, newOwner)
なぜupdateまたはdeleteステートメントがcaseクラス自体にないのか疑問に思っています。
case class Car(id: Pk[Long] = NotAssigned, owner: String) {
def updateOwner(newOwner: String) {
DB.withConnection { implicit connection =>
SQL(
"""
update car
set owner = {newOwner}
where id = {id}
"""
).on(
'id -> id,
'newOwner -> newOwner
).executeUpdate()
}
copy(owner = newOwner)
}
}
そうすることで、次のことが可能になります。
val updatedCar = myCar.updateOwner(newOwner)
これは、JavaとJPAを使用してPlay1.Xで行っていたものです。おそらくその理由は明らかであり、Scalaに関する私の知識が少ないためです。