Anorm 2.5.2和 java.time LocalDateTime as date
val users = SQL(
s"SELECT * FROM user WHERE name={name} AND registered_date={registeredDate}").on(
"name" -> user.name,
"registeredDate" -> user.registeredDate
).executeQuery().as(userParser.*)
我发现即使我在数据库中有相同的名称1和相同的日期时间(时刻),查询也会返回空users
- 无法找到/匹配。
所以似乎无法按日期时间进行比较。为什么会这样?
我能够正确地将local-date-time插入数据库(参见:related)到数据库中(我的意思是似乎db和scala类型之间的转换是打开的) - 即。我用:
import anorm.ParameterMetaData._
(扩展了JavaTimeParameterMetaData)
我的userParser:
val userParser: RowParser[User] = {
get[Option[Long]]("user.id") ~
get[String]("user.name") ~
get[LocalDateTime]("user.registered_date") map {
case id ~ name ~ registeredDate =>
User(
id = id ,
name = name,
registeredDate = registeredDate
)
}
}
我的用户:
case class User(id: Option[Long] = None,
name: String,
registeredDate: LocalDateTime
)
答案 0 :(得分:0)
确定。我的坏。
关于MYSQL和TIMESTAMP的精度 http://dev.mysql.com/doc/refman/5.5/en/datetime.html
所以,就我而言:
CREATE TABLE `user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`registered_date` TIMESTAMP(6) NOT NULL,
PRIMARY KEY (`id`));
此处:Timestamp with a millisecond precision: How to save them in MySQL
我只需要用TIMESTAMP(6)
声明它 - 这也包括毫秒。
因为在我的测试中:
"The User Repository" should "not create new user if it already exists" in {
val someTimeAgo = LocalDateTime.now
val userWithoultId1 = User(name = "name1", registeredDate = someTimeAgo)
val maybeUserWithId1 = userRepository.findOrCreate(userWithoultId1)
val maybeUserWithId2 = userRepository.findOrCreate(userWithoultId1)
maybeUserWithId1.get.id should === (maybeUserWithId2.get.id)
LocalDateTime.now也包括milieseconds,显然是
所以我仍然喜欢Anorm。 (这只是我......):)