Scala 2.11 отсутствует, и предел 22 полей для классов классов кажется фиксированным (Scala Проблема, Примечания к выпуску).
Это было проблемой для меня какое-то время, потому что я использую классы case для моделирования объектов базы данных, которые имеют более 22 полей в Play + Postgres Async. Мое решение в Scala 2.10 состояло в том, чтобы разбить модели на несколько классов классов, но я считаю, что это решение трудно поддерживать и расширять, и я надеялся, что смогу реализовать что-то, как описано ниже, после переключения на Play 2.3.0-RC1 + Scala 2.11.0:
package entities
case class MyDbEntity(
id: String,
field1: String,
field2: Boolean,
field3: String,
field4: String,
field5: String,
field6: String,
field7: String,
field8: String,
field9: String,
field10: String,
field11: String,
field12: String,
field13: String,
field14: String,
field15: String,
field16: String,
field17: String,
field18: String,
field19: String,
field20: String,
field21: String,
field22: String,
field23: String,
)
object MyDbEntity {
import play.api.libs.json.Json
import play.api.data._
import play.api.data.Forms._
implicit val entityReads = Json.reads[MyDbEntity]
implicit val entityWrites = Json.writes[MyDbEntity]
}
Приведенный выше код не может компилироваться со следующим сообщением как для "Чтений", так и для "Writes":
No unapply function found
Обновление "Считывает" и "Записывает" на:
implicit val entityReads: Reads[MyDbEntity] = (
(__ \ "id").read[Long] and
(__ \ "field_1").read[String]
........
)(MyDbEntity.apply _)
implicit val postWrites: Writes[MyDbEntity] = (
(__ \ "id").write[Long] and
(__ \ "user").write[String]
........
)(unlift(MyDbEntity.unapply))
Также не работает:
implementation restricts functions to 22 parameters
value unapply is not a member of object models.MyDbEntity
Я понимаю, что Scala 2.11 все еще имеет некоторые ограничения на функции, и что-то вроде того, что я описал выше, пока невозможно. Мне это кажется странным, так как я не вижу преимущества отмены ограничений на классы case, если один из его основных случаев для пользователей по-прежнему не поддерживается, поэтому мне интересно, не хватает ли я чего-то.
Указатели на проблемы или детали реализации более чем приветствуются! Спасибо!