我管理一台拥有MySQL数据库的Play服务器。其中一张表有一个
BLOB
列。在游戏2.2中,在任何明确的ParameterValue
之前
由2.3引入的业务,我只能通过注入来读/写
Array[Byte]
我的查询就像这样:
val foo: Array[Byte] = ??? // Doesn't matter.
SQL("update my_table set the_blob = {foo} where id = {id}").on('foo -> foo, 'id -> id).executeUpdate()
这不再适用。它会在编译时抱怨:
type mismatch;
found : (Symbol, Array[Byte])
required: anorm.NamedParameter
似乎Anorm不知道如何转换Array[Byte]
,所以我的愚蠢
我写道:
// Now everything will work perfectly and I can get back to my day.
implicit def byteArrayToParameter(ba: Array[Byte]): ParameterValue = {
ba
}
起初我没有发现任何问题,但最终我注意到了任何尝试
使用BLOB
写入表格
许多调试让我回到上面的implicit
函数。记录消息
向我展示了这种转换是在无限循环中反复调用的。
问题:如何正确处理使用Anorm编写BLOB
的问题?
(或更一般地说)
问题:如何为类型提供正确的转化实例
无法自动转换为ParameterValue
?
谢谢。
答案 0 :(得分:2)
似乎其他人也有类似的麻烦,特别是在找到如何编写这些类型映射的任何文档方面。在文档发现方面,我对Play的体验通常是消极的。
解决方案如下,借用Grokbase线程并为清晰起见进行了修改:
.attr()