迁移到anorm2.4(带有游戏2.4):ToStatement [T]和ToStatement [Option [T]]

时间:2015-11-19 17:00:21

标签: playframework playframework-2.4 anorm

直到播放2.3中包含的anorm,我才能写下以下内容:

implicit val arbitraryClassToStatement = new ToStatement[ArbitraryClass] {
  def set( 
    s: java.sql.PreparedStatement, 
    index: Int, 
    aValue: ArbitraryClass
  )
  : Unit = {
    s.setString(
      index, 
      ArbitraryClass.definingString
    )
  }
}

这有助于插入

SQL("INSERT INTO SomeTable Values( {nonNullAc}, {possiblyNullAc} )" ).on(
 'nonNullAc -> ArbitraryClass( "abcd" ),
 'possiblyNullAc -> Option( ArbitraryClass( "abcd" ) )
)

意味着ArbitraryClass和Option [ArbitraryClass]都会满足它。这似乎不再是这种情况,因为我收到以下错误:

[error]  found   : (Symbol, Option[models.Misc.Url])
[error]     (which expands to)  (Symbol, Option[java.net.URL])
[error]  required: anorm.NamedParameter

有人可以指出我处理这个问题的正确方法吗?我想要最少的代码重复..

1 个答案:

答案 0 :(得分:4)

您需要创建ParameterMetaData[ArbitraryClass]才能使其正常工作

implicit object ArbitraryClassMetaData extends ParameterMetaData[ArbitraryClass] {
  val sqlType = ParameterMetaData.StringParameterMetaData.sqlType
  val jdbcType = ParameterMetaData.StringParameterMetaData.jdbcType 
}

在这里,我只是重新使用ParameterMetaData[String]

的值