我的问题非常接近这个问题,但我的错误是不同的。
Customer Type Mapper for Slick SQL
这是我的实用程序类,其中定义了JDATE和Mapper
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。
如何通过这里的?为这个菜鸟问题道歉。感谢
答案 0 :(得分:1)
这里有两个问题:
JDATE
- 您实际上并不想在任何地方使用它,您想要的能够在{{1}之间进行翻译}和DateTime
个实例。使用Timestamp
代替DateTime
类型(例如column
而不是column[DateTime]("BIRTHDAY")
)您实际上从未导入隐式column[JDATE]("BIRTHDAY")
转换器,因此Slick的DateTime <> Timestamp
永远不会选择它。之一:
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