1

Я пытаюсь перенести приложение из Rails/Mongoid в Play/Reactivemongo с reactivemongo-extensions. Многие из моих документов содержат более 22 полей. Библиотека JSON от Play, похоже, не может обрабатывать> 22 поля. Каков предпочтительный шаблон для работы с схемами базы данных, имеющими более 22 полей в play/scala/reactivemongo?Работа с базами данных, содержащей более 22 полей в Play 2.x

Я чувствую, что мне не хватает общей схемы дизайна, потому что это похоже на очень распространенный случай использования. Веб-инфраструктура, которая не может работать даже с таблицами базы данных с умеренным размером, не будет очень полезна, поэтому я думаю, что мне не хватает очевидного решения.

+0

Какую версию Scala вы используете? Я думаю, что это ограничение самой Scala, но оно уже было исправлено в Scala 2.11 ... – Salem

+2

Нормализовать ваши данные. Класс с более чем 22 полями (или рядом с ним) не является обычным прецедентом. –

+0

В Slick проблема разрешена списком HCons, http://stackoverflow.com/questions/20555304/how-can-i-use-the-new-slick-2-0-hlist-to-overcome-22-column -limit –

ответ

0

Вы можете сопоставить свою плоскую структуру json с иерархической структурой объекта. Тогда вам не нужно иметь дело с огромными объектами, и вы можете иметь более 22 полей.

case class SubObject(field4: String, field5:String) 
case class MainObject(field1: String, field2: String, field3: String, 
subObject: SubObject, field6: String, field7: String) 

implicit val mainObjectFormat: Format[MainObject] = (
    (__ \ "field1").format[String] and 
    (__ \ "field2").format[String] and 
    (__ \ "field3").format[String] and 
    (
     (__ \ "field4").format[String] and 
     (__ \ "field5").format[String] 
    )(SubObject.apply, unlift(SubObject.unapply)) and 
    (__ \ "field6").format[String] and 
    (__ \ "field7").format[String]  
(MainObject.apply, unlift(MainObject.unapply))