【发布时间】:2015-11-13 22:22:25
【问题描述】:
光滑 2.1 斯卡拉 2.11.7
无法获得 Long java.sql.Timestamp 或 java.sql.Date 工作的隐式转换。我让他们为其他转换工作,例如 JodaTime.DateTime java.sql.Timestamp...
例如查询返回错误:
org.postgresql.util.PSQLException: ERROR: operator does not exist:
timestamp with time zone >= bigint Hint: No operator matches
the given name and argument type(s). You might need to add explicit type casts.
Position: 325
这些是隐含的,它们肯定被正确导入以在范围内:
implicit val LongToTimestamp = MappedColumnType.base[Long, Timestamp](
longTS => new Timestamp(longTS),
sqlTS => sqlTS.getTime
)
implicit val LongToDate = MappedColumnType.base[Long, java.sql.Date](
longTS => new java.sql.Date(longTS),
sqlDate => sqlDate.getTime
)
我也尝试过使用 java.lang.Long 代替:
implicit val LongToTimestamp = MappedColumnType.base[java.lang.Long, Timestamp](
longTS => new Timestamp(longTS),
sqlTS => sqlTS.getTime
)
implicit val LongToDate = MappedColumnType.base[java.lang.Long, java.sql.Date](
longTS => new java.sql.Date(longTS),
sqlDate => sqlDate.getTime
)
我在这里缺少什么?谢谢!
--
附加信息:
查询方法定义为(queued is a java.sql.Timestamp):
def getJobs(jobTypeId: Short, onOrAfter: DateTime): Seq[JobRow] = {
val q1 = for{j <- Jobs if j.jobTypeId === jobTypeId && j.queued >= onOrAfter.getMillis} yield j
db.withSession{ implicit s =>
q1.buildColl[Seq]
}
}
表定义:
class Jobs(tag: Tag) extends Table[JobRow](tag, "job") {
def jobId = column[Long]("job_id", O.PrimaryKey, O.NotNull)
def jobTypeId = column[Short]("job_type_id", O.NotNull)
def queued = column[Long]("queued", O.NotNull)
def * = (jobId, jobTypeId, queued) <>((JobRow.apply _).tupled, JobRow.unapply_ )
def pk = primaryKey("job_pk", jobId)
}
【问题讨论】:
-
问题不在于您的映射,而在于您的查询 - 您能告诉我们您是如何生成查询的吗? ( Long 按原样绑定,未转换为时间戳,导致错误)。或者,您的隐含可能会被 Slick 的默认隐含所掩盖。
-
感谢您的浏览。我添加了表定义和查询示例。感觉就像你的第二个想法,Slick 的默认隐式正在占据主导地位,而我的被忽略了。不知道怎么解决。
标签: postgresql scala slick