是否可以在预编译的Slick查询中将集合用作参数?
就像是:
private val findByIds = for {
ids <- Parameters[Set[Int]]
meta <- AssetMetadatas if meta.id inSet ids
} yield meta
Run Code Online (Sandbox Code Playgroud)
不幸的是上面没有编译:
不知道如何拆开scala.collection.immutable.Set [INT]到scala.collection.immutable.Set [INT]和包装,以任何IDS < - 参数[设置[INT]] ^
你现在无法使用inSet预编译查询,无论是在Slick 1还是在Slick 2中.当您考虑到不同的Set大小的SQL中的查询必须不同时,这是有意义的.
WHERE falseWHERE id = ?WHERE id IN (?,?)WHERE id IN (?,?,?)这通常不能预编译,因此Slick必须每次都为它编译SQL.我们可能会在某些时候为某些后端支持它.如果它很重要,您可以自己预编译一些选定的集合大小的查询(使用&&而==不是代替inSet).
使用inSetBind而不是inSet将set作为参数传递给预准备语句,而不是将它们作为文字编译到SQL字符串中.如果您以这种方式配置,这允许您的连接池缓存预准备的语句.所以Slick仍然需要编译查询,但至少你的数据库可以缓存查询计划.
| 归档时间: |
|
| 查看次数: |
2695 次 |
| 最近记录: |