gpt4 book ai didi

scala - 是否可以在 Slick 查询模板中使用 List 或 Set 类型的参数? (提升API)

转载 作者:行者123 更新时间:2023-12-01 08:01:18 24 4
gpt4 key购买 nike

是否可以在预编译的 Slick 查询中使用集合作为参数?

就像是:

private val findByIds = for {
ids <- Parameters[Set[Int]]
meta <- AssetMetadatas if meta.id inSet ids
} yield meta

不幸的是,上面没有编译:

不知道如何将 scala.collection.immutable.Set[Int] 解包为 scala.collection.immutable.Set[Int] 并打包为 Any
ids <- 参数[Set[Int]]
^

最佳答案

您目前无法使用 inSet 预编译查询,无论是在 Slick 1 还是 Slick 2 中。当您考虑到 SQL 中针对不同 Set 大小的查询必须不同时,这是有道理的。

  • 对于 0:WHERE false
  • 1: WHERE id = ?
  • 2: WHERE id IN (?,?)
  • 3: WHERE id IN (?,?,?)
  • ...

  • 这个一般不能预编译,所以Slick每次都要为它编译SQL。我们可能会在某个时候为某些后端提供支持。如果很重要,您可以自己为选定的集合大小预编译几个查询(使用 &&== 而不是 inSet )。

    使用 inSetBind而不是 inSet将集合作为参数传递给准备好的语句,而不是将它们作为文字编译到 SQL 字符串中。这允许您的连接池缓存准备好的语句,如果您以这种方式配置它。所以 Slick 仍然需要编译查询,但至少你的数据库可以缓存查询计划。

    关于scala - 是否可以在 Slick 查询模板中使用 List 或 Set 类型的参数? (提升API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19926258/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com