Salat(play-salat)で日付型のカラムにJodaTimeを使う方法
Play Scala でアプリを作る際、データベースにMongoDBを採用するってのは、結構ある話かなと思います。
PlayでMongoDBを使おうと思うと、play-salat を使うことになると思います。SalatはMongoDB用のORMです。
SalatでJoda Timeを使う方法をメモ書きしておきます。
下記をインポートするといいです。
RegisterConversionHelpers() RegisterJodaTimeConversionHelpers()
Salat、というかPlay-Salatを使う場合、下記のようなパッケージオブジェクトを作っておくと思うのですが、
package models import com.novus.salat.dao._ import com.novus.salat.annotations._ import com.mongodb.casbah.Imports._ import com.mongodb.casbah.commons.conversions.scala.{RegisterConversionHelpers, RegisterJodaTimeConversionHelpers} import com.novus.salat.{ TypeHintFrequency, StringTypeHintStrategy, Context } import play.api.Play import play.api.Play.current package object mongoContext { RegisterConversionHelpers() RegisterJodaTimeConversionHelpers() implicit val context = { val context = new Context { val name = "global" override val typeHintStrategy = StringTypeHintStrategy(when = TypeHintFrequency.WhenNecessary, typeHint = "_t") } context.registerGlobalKeyOverride(remapThis = "id", toThisInstead = "_id") context.registerClassLoader(Play.classloader) context } }
上記のように、この中に宣言してやるといいです。
あとは各モデルクラスの中で、下記のようにパッケージオブジェクトをインポートしてやればいい感じにJodaTimeを使えます。
package models import play.api.Play.current import org.joda.time.DateTime import com.novus.salat._ import com.novus.salat.annotations._ import com.novus.salat.dao._ import com.mongodb.casbah.Imports._ import se.radley.plugin.salat._ import mongoContext._ case class Hoge(fuga: String, baz: String, date: DateTime) object Lead extends ModelCompanion[Hoge, ObjectId] { val dao = new SalatDAO[Hoge, ObjectId](collection = mongoCollection("Hoge")) {} def findOneByVisitorId(fuga: String): Option[Hoge] = dao.findOne(MongoDBObject("fuga" -> fuga)) }