如何使用SORM在我的模型上包含时间戳(created_at和updated_at)?

时间:2012-12-01 11:53:30

标签: scala sorm

ActiveRecord处理时间戳做这样的事情:

  • 插入数据? created_at已定义
  • 更新数据? updated_at已重新定义

我如何使用SORM进行操作?

1 个答案:

答案 0 :(得分:3)

乍一看,这样的事情可行:

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)
      }
}

我得告诉你,整个问题对我来说并不是很自然。我无法想象这种行为会带来什么好处。但是我再次向你们展示了各种选择。