在play Framework2.3上使用Scala2.11.1。
由于Anorm在以前的版本中不支持多值参数,所以我使用了大卫氏解决方案。Anorm现在是支座,多值参数和我开始删除解决方案,使用Anorm多值参数。
示例 sic提到:
// With default formatting (", " as separator)
SQL("SELECT * FROM Test WHERE cat IN ({categories})").
on('categories -> Seq("a", "b", "c")
// -> SELECT * FROM Test WHERE cat IN ('a', 'b', 'c')但我的准则是:
val names = List("Able", "Baker", "Charlie") // Passed as a parameter to my method!
val result =
SQL( """
SELECT city
FROM addresses
WHERE name IN ({names});
""" ).on( 'names -> names ).as( scalar[String] * )给我这个错误:
type mismatch;
found : (Symbol, List[String])
required: anorm.NamedParameter或
type mismatch;
found : (Symbol, scala.collection.immutable.Seq[String])
required: anorm.NamedParameter取决于我是否尝试一个列表或序列(或建议之一来映射它)。
我不是专家,到目前为止,我认为它缺少一些隐含的转换?不知道怎么/什么/在哪里。小贴士/建议/解决方案欢迎!
发布于 2014-08-05 14:55:43
查看Anorm文档,您将看到没有使用List的多值示例。实际上,这是故意的,因为NamedParameter的实例只为Seq[T]实现。
只需将代码更新为val names = Seq("Able", "Baker", "Charlie")即可使其有效(并进行编译)。
我建议使用Anorm插值来编辑您的代码:
val result =
SQL"SELECT city FROM addresses WHERE name IN ($names)" as scalar[String].*
// OR (if names won't change):
val result = SQL"""SELECT city FROM addresses
WHERE name IN (${Seq("Able", "Baker", "Charlie")})""".
as(scalar[String].*)编辑:参见Anorm https://github.com/playframework/playframework/pull/3257中的更改(支持列表)
https://stackoverflow.com/questions/25140720
复制相似问题