Slick class 定义:声明日期隐含值时出错

Slick class definition: error declaring date implicit value

我有一个只有一列(日期)的 table。这就是我尝试在 Slick 3.x:

中建模的方式

数据库class:

import slick.driver.MySQLDriver.api._
import java.sql.Date
import java.time.LocalDate

class ReportDateDB(tag: Tag) extends Table[ReportDateVO](tag, "report_dates") {

  def reportDate = column[LocalDate]("report_date")

  def * = (reportDate) <> (ReportDateVO.apply, ReportDateVO.unapply)

  implicit val localDateColumnType = MappedColumnType.base[LocalDate, Date](
    d => Date.valueOf(d),
    d => d.toLocalDate
  )

}

值对象大小写class:

import java.time.LocalDate

case class ReportDateVO(reportDate: LocalDate)

问题是我在数据库 class 中遇到以下错误(当我声明字段 reportDate 时):

  • could not find implicit value for parameter tt: slick.ast.TypedType[java.time.LocalDate]
  • not enough arguments for method column: (implicit tt: slick.ast.TypedType[java.time.LocalDate])slick.lifted.Rep[java.time.LocalDate]. Unspecified value parameter tt.

这是什么错误以及如何解决?隐式转换 from/to LocalDate/sql.Date 已定义。

您应该可以通过明确提供值来解决此问题:

def reportDate = column[LocalDate]("report_date")(localDateColumnType)

为了保持隐式而不是明确引用 localDateColumnType 只需将其定义放在列定义之前。