Scala Slick类表定义,错误声明DateTime列



下面是DB类在进行表定义时,Datetime列出现编译错误。

  1. Created_on应在更新当前日期

  2. updated_on应该只是模拟传递日期。

    包装表

    import play.data.format.Formats.DateTime
    import slick.driver.PostgresDriver.api._
    
    object Main {
    case class Account(
    id: Long = 0L,
    owner: Long,
    name: String,
    created_on: DateTime,
    updated_on: DateTime,
    author_id: Long,
    updated_by: Long,
    external_id: String
    )
    

    类AccountTable(tag:tag(扩展TableAccount{

    def id  = column[Long]("id")
    def owner= column[Long]("id")
    def name= column[String]("name")
    def created_on= column[DateTime]("created_on")
    def updated_on= column[DateTime]("updated_on")
    def author_id= column[Long]("author_id")
    def updated_by= column[Long]("updated_by")
    def external_id= column[String]("external_id")
    
    def * = (owner, name, created_on, 
    updated_on,author_id,updated_by,external_id) <> (Account.tupled, 
    Account.unapply)
    

    }

    }

我不确定您使用的是什么DateTime类。也许是Joda时代的DateTime课程?

为此,您需要提供一个从DateTime到Slick知道的类型的映射(以及一个对数据库中的列有意义的映射(。例如,您可以将DateTime映射到Timestamp:

import java.sql.Timestamp
import org.joda.time.DateTime
import org.joda.time.DateTimeZone.UTC
// And in your `Main`...
implicit val jodaDateTimeType =
MappedColumnType.base[DateTime, Timestamp](
dt => new Timestamp(dt.getMillis),
ts => new DateTime(ts.getTime, UTC)
)

例如这是在教Slick如何从DateTime转换为它所知道的类型(Timestamp(。

有一个关于这方面的教程,在Essential Slick的第5章中有更多详细信息。

自Slick3.3以来,内置了对许多标准Java时间格式的支持,如发行说明中所述。

此外,由于Slick 3,您可以在大多数情况下使用.mapTo映射类。它比<>:读起来好得多

def * = (
owner, name, created_on, updated_on, author_id, updated_by, external_id
).mapTo[Account]

最新更新