【发布时间】:2014-02-05 21:10:54
【问题描述】:
我在这里使用 scala 和 slick,并且我有一个 baserepository 负责完成我的课程的基本工作。 对于设计决策,我们确实将 updatedTime 和 createdTime 列全部由应用程序处理,而不是由数据库中的触发器处理。这两个字段都是 joda DataTime 实例。 这些字段在表的两个特征中定义,称为 HasUpdatedAt 和 HasCreatedAt
trait HasCreatedAt {
val createdAt: Option[DateTime]
}
case class User(name:String,createdAt:Option[DateTime] = None) extends HasCreatedAt
我想知道如何使用反射调用用户复制方法,在数据库插入方法期间更新 createdAt 值。
在@vptron 和@kevin-wright cmets 之后编辑
我有一个这样的仓库
trait BaseRepo[ID, R] {
def insert(r: R)(implicit session: Session): ID
}
我只想实现一次插入,并且我想更新 createdAt,这就是我不使用复制方法的原因,否则我需要在使用 createdAt 列的任何地方实现它。
【问题讨论】:
-
为什么需要反思?
copy方法不是私有的。 -
不要这样做。您无法保证 scalac 不会在不可变对象实际上是不可变的假设下进行优化。使用
copy,这就是它的用途! -
感谢 cmets @vptheron ,我刚刚更新了问题以添加更多详细信息来解释为什么我不想在这里使用复制方法。
标签: scala reflection