如何在 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 (将#修改为@)