我正在寻找有关使用 play 2.0 将对象持久保存在数据库中的模型和方法的最佳实践。我已经使用 Scala 研究了 Play 2.0 的 Play 和 typesafe 示例。
我的理解是:
- 模型在案例类中定义
- 所有的插入/更新/删除/选择都定义在这个案例类的伴生对象中
因此,如果我需要更新我的 Car 对象以定义新所有者,我将不得不这样做:
val updatedCar = myCar.copy(owner=newOwner)
Car.update(updatedCar)
// or
Car.updateOwner(myCar.id.get, newOwner)
我想知道为什么更新或删除语句不在案例类本身中:
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 对 Play 1.X 所做的事情。也许原因很明显,而且由于我对 Scala 的了解很少。