简体   繁体   English

播放框架-将主动脉与Option [LocalDate] \\ Option [LocalDateTime]结合使用

[英]Play framework - Using anorm with Option[LocalDate] \ Option[LocalDateTime]

I am trying to define a nullable date field in postgres, while using anorm as connection to the database. 我正在尝试在将anorm用作数据库连接时在postgres中定义可为空的日期字段。

I am trying to update an entry: 我正在尝试更新条目:

def update(id: Long, startTime: Option[LocalDate]){
   SQL("""UPDATE my_table
        |SET start_date = {start_date}
        |WHERE id = {id}
      """.stripMargin)
      .on(
        'id ->id,
        'start_date -> startDate,
      ).executeUpdate()
 }

But I get a compilation error, looks like anorm can't handle Option[DateTime], although when I configured a parser it works form me: 但是我收到一个编译错误,看起来主动脉无法处理Option [DateTime],尽管当我配置解析器时它对我有效:

val parser: RowParser[Info] = {
  get[Long]("id") ~
  get[Option[DateTime]]("start_date") map {
  case id ~ startTime => Info(id, startDate)
}

} }

What am I missing here? 我在这里想念什么? Thanks! 谢谢!

I added my own implicit definitions: 我添加了自己的隐式定义:

implicit def rowToLocalDate: Column[LocalDate] = Column.nonNull {(value, meta) =>
   val MetaDataItem(qualified, nullable, clazz) = meta
   value match {
      case ts: java.sql.Timestamp => Right(new LocalDate(ts.getTime))
      case d: java.sql.Date => Right(new LocalDate(d.getTime))
      case str: java.lang.String => Right(fmt.parseLocalDate(str))
      case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass) )
}

} }

implicit val localDateToStatement = new ToStatement[LocalDate] {
    def set(s: java.sql.PreparedStatement, index: Int, aValue: LocalDate): Unit = {
       s.setTimestamp(index, new java.sql.Timestamp(aValue.toDateTimeAtStartOfDay().getMillis()))
}

} }

And the relevant ParameterMetaData 以及相关的ParameterMetaData

implicit object LocalDateClassMetaData extends  ParameterMetaData[LocalDate] {
   val sqlType = ParameterMetaData.DateParameterMetaData.sqlType
   val jdbcType = ParameterMetaData.DateParameterMetaData.jdbcType
}

That made the trick 那把戏

相关问题, 通过Java.time LocalDateTime进行Anorm比较/搜索,它对有用的只是更新到新版本(尚未发行一个)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM