【问题标题】:play-json OWrites for a class in trait which is implemented by an object of same nameplay-json OWrites 用于 trait 中由同名对象实现的类
【发布时间】:2021-08-12 21:52:23
【问题描述】:

当 slick 生成代码时,它是这样的(sample1/Tables.scala):

package sample1

object Tables extends {
  val profile = ???
} with Tables

trait Tables {
  case class Class1Row(num: Int)
}

我只想使用 play-json 转储 db 对象,所以我需要 OWrites(在 sample1/X.scala 中):

package sample1

import play.api.libs.json.{Json, Writes}

object X {
  implicit val class1Writes: Writes[Tables.Class1Row] = Json.writes[Tables.Class1Row]
}

编译时报错:

sample1/X.scala:6:68
type mismatch;
 found   : Tables.this.Class1Row => Option[Int]
 required: sample1.Tables.Class1Row => Option[Int]
  implicit val class1Writes: Writes[Tables.Class1Row] = Json.writes[Tables.Class1Row]

当我已经在 val 赋值的两边都指定了相同的类型时,为什么会出现编译问题?

【问题讨论】:

    标签: scala playframework slick play-json play-slick


    【解决方案1】:

    在谷歌搜索多一点(几个小时)后,发现这是一个没有修复的已知问题。

    https://github.com/playframework/playframework/issues/4598 已关闭。 https://github.com/slick/slick/issues/1382 目前已开通。

    我现在通过使用从 slick 的代码生成器扩展而来的自定义代码生成器来解决这个问题,该生成器将案例类放在 trait 之外,根据:Custom Slick Codegen generate mapped case classes outside the `${container} trait`?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多