gpt4 book ai didi

mysql - Joda-Date Mapper for Slick - MappedColumnTyoe

转载 作者:行者123 更新时间:2023-11-29 12:38:23 34 4
gpt4 key购买 nike

我的问题与这个问题非常接近,但我的错误不同。

Customer Type Mapper for Slick SQL

这是我的实用程序类,其中定义了 JDATE 和映射器

package org.mydomain.utils
import slick.driver.MySQLDriver.simple._
import org.joda.time.DateTime
import java.sql.Date
import org.joda.time.DateTime
import java.sql.Timestamp

sealed trait JDATE

object DateUtils {

implicit def jdateColumnType =
MappedColumnType.base[DateTime, Timestamp](
dt => new Timestamp(dt.getMillis),
ts => new DateTime(ts.getTime)
)
}

域对象User.scala如下

case class UserRow(id: Long, birthday: JDATE)

class User(tag: Tag) extends Table[UserRow](tag, "USER") {
def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
def birthday = column[JDATE]("BIRTHDAY")

def * = (id, birthday) <> (UserRow.tupled, UserRow.unapply)
}

错误:方法列的参数不足:(隐式 tm:scala.slick.ast.TypedType[org.mydomain.utils.JDATE])scala.slick.lifted.Column[org.mydomain.utils.JDATE]。未指定值参数 tm。

如何在这里传递tm?为这个菜鸟问题道歉。谢谢

最佳答案

这里有两个问题:

  1. 您不需要 JDATE - 你实际上不想在任何地方使用它,你想要是能够在 DateTime 之间进行翻译和Timestamp实例。使用DateTime对于column改为键入(例如 column[DateTime]("BIRTHDAY") 而不是 column[JDATE]("BIRTHDAY") )
  2. 你从来没有真正导入你的隐式 DateTime <> Timestamp转换器,因此 Slick 的 column 永远不会拾取它。 。要么:

    // Import the implicit in the constructor
    class User(tag: Tag) extends Table[UserRow](tag, "USER") {
    import org.mydomain.utils.DateUtils.jdateColumnType
    // Your code here
    }

    // Explicitly pass the implicit converter in yourself
    class User(tag: Tag) extends Table[UserRow](tag, "USER") {
    // ... snip ...
    def birthday = column[DateTime]("BIRTHDAY")(DateUtils.jdateColumnType)
    // ... snip ...
    }

    或者(最佳选择),通过扩展 MySql 创建您自己的驱动程序具有您的自定义隐式特征的驱动程序:

    package org.mydomain.db

    import scala.slick.driver.{MySqlDriver, JdbcDriver}

    trait DateUtils {
    implicit def jdateColumnType =
    MappedColumnType.base[DateTime, Timestamp](
    dt => new Timestamp(dt.getMillis),
    ts => new DateTime(ts.getTime)
    )
    }

    trait CustomMySqlDriver extends JdbcDriver with MySqlDriver with DateUtils

    object CustomMySqlDriver extends CustomMySqlDriver

    然后你可以像这样使用它:

    import org.mydomain.db.CustomMySqlDriver.simple._

    class User(tag: Tag) extends Table[UserRow](tag, "USER") {
    // ... snip ...
    def birthday = column[DateTime]("BIRTHDAY")
    // ... snip ...
    }

关于mysql - Joda-Date Mapper for Slick - MappedColumnTyoe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26433721/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com