2016-11-26 5 views
1

私はPlay Framework Modelの列としてJson Fieldを保存する必要があります。 DAOでの私のテーブルパーサーはScala + Play Framework + Slick - モデルフィールドとしてのJson

class Table(tag: Tag) extends Table[Model](tag, "tablename") { 
     implicit val configFormat = Json.format[Config] 

     // Fields ... 
     def config = column[Config]("config", O.SqlType("JSON")) 
     // Fields ... 

    } 

Configあるプレイモデルフォルダ内のモデルでケースクラスとして定義され、彼のコンパニオンオブジェクトを持っています。このオブジェクトのフィールドのInt、ダブルまたは文字列

case class Config (// fields) 

    object Config { 
     implicit val readConfig: Reads[Config] = new Reads[Config] 
     for { 
      // fields 
     } yield Config(// fields) 

     implicit val configFormat = Json.format[Config] 

    } 

問題は、私はこのエラーが原因

Error:(28, 37) could not find implicit value for parameter tt:   
     slick.ast.TypedType[models.Config] 
     def config = column[Config]("config", O.SqlType("JSON")) 

をコンパイルすることはできませんされている表にJSONとしてコンフィグモデルを保存する方法はあります(それをConfigとして読む)?

答えて

1

あなたは、データベースの列にあなたのConfigインスタンスを変換する方法スリック指示する必要があります:

implicit val configFormat = Json.format[Config] 
implicit val configColumnType = MappedColumnType.base[Config, String](
    config => Json.stringify(Json.toJson(config)), 
    column => Json.parse(column).as[Config] 
) 
+0

それは動作しますが、よろしくお願いします。あなたはjsonやテキストで列を保存するのが最善だと思いますか? – emmea90

+0

私はそれらをJSONとして保存します。それには2つの理由があります。 1. DBエンジンは、その列に挿入されたJSON値の妥当性を強制します。 2.これらの値をJSONとして保存すると、その列に対して追加のJSON固有の関数と演算子を使用できるようになります。 –

関連する問題