微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Slick 中将案例类映射为 postgresql 列

如何解决如何在 Slick 中将案例类映射为 postgresql 列

我有以下数据结构:

final case class Log(
  id: UUID,event: String,Metadata: Option[List[Metadata]]
)

final case class Metadata(key: String,value: String)

用于带有一些可选元数据的事件日志。 我正在尝试使用 Slick (v3.3.3) 和 Slick-pg (v0.17.3) 将它们保存在 postgresql (v42.2.5) 表中:

class LogTable(tag: Tag)
    extends BaseTable[Log](tag,"event") {

  def id: Rep[EventId]                      = column[EventId]("id")
  def event: Rep[String]                    = column[String]("event")
  def Metadata: Rep[Option[List[Metadata]]] = column[Option[List[Metadata]]]("Metadata")

  override def * =
    (id,event,eventType,Metadata) <>
      ((Log.apply _).tupled,Log.unapply _)
}

但是我得到以下编译错误

Could not find implicit value for parameter tt: slick.ast.TypedType[Option[List[log.domain.Metadata]]]

我尝试编写自定义列映射器:

  implicit val MetadataColumnType = MappedColumnType.base[Metadata,String](
    {
      Meta => write(Meta) // return string
    },{
      Meta_string => read(Meta_string) // return Metadata
    }
  )

然而,这种隐式不被认为是必需的,并且会导致同样的错误

如何正确映射 Option[List[Metadata]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。