【问题标题】:Working with databases containing more than 22 fields in Play 2.x在 Play 2.x 中使用包含超过 22 个字段的数据库
【发布时间】:2014-11-23 18:39:37
【问题描述】:

我正在尝试使用reactivemongo-extensions 将应用程序从 Rails/Mongoid 迁移到 Play/Reactivemongo。我的许多文档都有超过 22 个字段。 Play 的 JSON 库似乎无法处理 > 22 个字段。处理在 play/scala/reactivemongo 中具有超过 22 个字段的数据库模式的首选模式是什么?

我觉得我一定错过了一个常见的设计模式,因为这似乎是一个非常常见的用例。即使是中等大小的数据库表也无法使用的 Web 框架不会很有用,所以我认为我一定错过了一个明显的解决方案。

【问题讨论】:

  • 您使用的是哪个 Scala 版本?我认为这是 Scala 本身的一个限制,但它已经在 Scala 2.11 中修复...
  • 标准化您的数据。具有超过 22 个字段(或接近该字段)的类并不是真正常见的用例。
  • 在 Slick 中,问题由 HCons 列表解决,stackoverflow.com/questions/20555304/…
  • @m-z 我正在使用 mongodb,其中包含大量字段的文档是常见用例。
  • 我使用的是 Scala 2.11,它确实提升了限制,但 Play 框架显然仍然有代码,因为它们支持 Scala 2.10,所以它们的行为就像存在限制一样。我通过 this question 使用 Shapeless 库找到了一种解决方法,但这感觉更像是一个 hack,而不是一个好的解决方案。

标签: json scala playframework playframework-2.3 play-reactivemongo


【解决方案1】:

您可以将平面 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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多