2016-11-26 11 views
1

Мне нужно сохранить поле Json как столбец моей модели Play Framework. Моя таблица парсер в DAO являетсяScala + Play Framework + Slick - Json as Model Field

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 определяется как случай класса в модели в папке Play Model и имеет свой объект компаньон. Поле этого объекта 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")) 

Есть ли способ, чтобы сохранить модель Config как Json в таблице (чтение его как Config)?

ответ

1

Вы должны сказать Slick, как конвертировать 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 или text? – emmea90

+0

Я бы сохранил их как JSON. Для этого есть две причины: 1. Ваш механизм DB обеспечит достоверность значений JSON, вставленных в этот столбец. 2. Сохраняя эти значения в виде JSON, вы сможете использовать дополнительные JSON-функции и операторы в этом столбце. –