迁移到 anorm2.4(使用 play 2.4):ToStatement[T] 和 ToStatement[Option[T]]
Migrating to anorm2.4 (with play 2.4): ToStatement[T] and ToStatement[Option[T]]
在 play 2.3 中包含的异常之前,我可以编写以下内容:
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
谁能告诉我处理这个问题的正确方法是什么?我希望代码重复最少..
您需要创建一个 ParameterMetaData[ArbitraryClass]
才能正常工作
implicit object ArbitraryClassMetaData extends ParameterMetaData[ArbitraryClass] {
val sqlType = ParameterMetaData.StringParameterMetaData.sqlType
val jdbcType = ParameterMetaData.StringParameterMetaData.jdbcType
}
这里我只是取回了ParameterMetaData[String]
的值
在 play 2.3 中包含的异常之前,我可以编写以下内容:
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
谁能告诉我处理这个问题的正确方法是什么?我希望代码重复最少..
您需要创建一个 ParameterMetaData[ArbitraryClass]
才能正常工作
implicit object ArbitraryClassMetaData extends ParameterMetaData[ArbitraryClass] {
val sqlType = ParameterMetaData.StringParameterMetaData.sqlType
val jdbcType = ParameterMetaData.StringParameterMetaData.jdbcType
}
这里我只是取回了ParameterMetaData[String]