ActiveRecord 处理时间戳,如下所示:
- 插入数据?created_at 已定义
- 更新数据?updated_at 被重新定义
我将如何使用 SORM 来做到这一点?
乍一看,这样的事情可能会起作用:
import org.joda.time._
object Db extends Instance (entities = ...) {
override def save [T <: AnyRef : TypeTag] ( v : T )
= v match {
case v : Artist with Persisted =>
super.save( v.copy( updatedAt = DateTime.now() ) )
case v : Artist =>
super.save( v.copy( createdAt = DateTime.now() ) )
// ... so on for other entities
case v =>
super.save(v)
}
}
但是,您将如何从头开始创建这些艺术家实例?应该为这些日期字段分配混乱null
的 s 或 null ish 日期值,还是应该将它们包裹在Option
s 中?好吧,其中任何一个都可以解决问题,但这是另一种选择:
import org.joda.time._
case class Artist
( name : String,
updatedAt : DateTime = DateTime.now(),
createdAt : DateTime = DateTime.now() )
object Db extends Instance (entities = ...) {
override def save [T <: AnyRef : TypeTag] ( v : T )
= v match {
case v : Artist with Persisted =>
super.save( v.copy( updatedAt = DateTime.now() ) )
case v =>
super.save(v)
}
}
我得告诉你整个问题对我来说不是很自然。我无法想象这种行为会带来什么好处。但话又说回来,我已经向您展示了这些选项。