2

ActiveRecord は、次のようなタイムスタンプを処理します。

  • データを挿入していますか?created_at が定義されている
  • データを更新していますか?updated_at が再定義されました

SORMを使用してどうすればよいですか?

4

1 に答える 1

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

では、これらのアーティスト インスタンスをゼロから作成するにはどうすればよいでしょうか。これらの日付フィールドには、乱雑なnulls または null っぽい日付値を割り当てる必要がありますか、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)
      }
}

問題全体が私にはあまり自然に感じられないことを言わなければなりません。そのような振る舞いが有益になるシナリオは想像できません。しかし、もう一度オプションを提示しました。

于 2012-12-01T13:01:47.250 に答える