scala – 播放2.0模型的最佳实践
我正在寻找关于模型的最佳实践以及使用play 2.0在数据库中持久保存对象的方法.我已经使用
scala研究了Play和类型安全样本for play 2.0.
我的理解是: >模型在案例类中定义 因此,如果我需要更新我的Car对象以定义新的所有者,我将不得不这样做: val updatedCar = myCar.copy(owner=newOwner) Car.update(updatedCar) // or Car.updateOwner(myCar.id.get,newOwner) 我想知道为什么更新或删除语句不在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对Play 1.X所做的. 解决方法
我认为部分原因是在Scala等函数式语言中支持不可变性.
在您的示例中,您修改’this.owner’.对于删除,你的等效操作是什么样的?“这个”会发生什么? 使用伴随对象,似乎更清楚的是传递的对象(或ID)未被修改,并且返回的对象或ID是操作的相关结果. 然后,我认为问题的另一部分是您的示例首先需要一个实例.当你删除一个Object时,如果你只是想通过Id删除一个表单,并且不想首先构建你想要删除的对象的整个实例,该怎么办? 我一直在用mongo玩play2.0,我的同伴对象看起来像: object MyObject extends SalatDAO [MyObject,ObjectId](collection = getCollection(“objectcollection”)){ 这些伴随对象从SalatDAO(MyObject.save(),MyObject.find()等继承CRUD操作.我不完全清楚它是如何在内部实现的,但它运行良好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |