如何使用 Slick Lifted Embedding 更新多个列?

Posted

技术标签:

【中文标题】如何使用 Slick Lifted Embedding 更新多个列?【英文标题】:How do you update multiple columns using Slick Lifted Embedding? 【发布时间】:2013-05-21 09:03:05 【问题描述】:

This document 不多说。

我希望它是这样的

Query(AbilitiesTable).filter((ab: AbilitiesTable.type) => ab.id === ability_id).map((ab: AbilitiesTable.type) => (ab.verb, ab.subject)).update("edit", "doc")

【问题讨论】:

【参考方案1】:

在最新版本的 Slick 中,这种编写方式有效:

Users.filter(_.id === filterId)
     .map(x => (x.name, x.age))
     .update(("john", 99))

如果您要更新多个属性,请注意记住多余的括号,否则您可能会收到编译器警告。

【讨论】:

在 intellij 中逗号可能不起作用。你可以这样写(x.name ~ x.age) 在 Intellij 2016 版中,逗号似乎工作正常。 不要忘记.map(x => (...))update(("x", "y")) 中的元组,所以要加双括号。【参考方案2】:

我想通了。应该是这样的

val map = Query(AbilitiesTable)
  .filter(_.id === ability_id)
  .map(ab => ab.verb ~ ab.context)

map.update(("", ""))

Typesafe,为什么你的文档这么差?我必须用谷歌搜索几乎所有愚蠢的事情,或者花几个小时研究单元测试。请改进它。谢谢。

【讨论】:

请注意,这只适用于可更新的结果集,它要求您包含 ID。如果您尝试使用它而不在构建的查询中包含 ID 字段,它将失败。 对不起...但是AbilitiesTable 是什么?这是TableQuery 对象吗?像这样的类:class CompanyTable(tag: Tag) extends Table[Company]?

以上是关于如何使用 Slick Lifted Embedding 更新多个列?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Slick 3.1.1 解析符号 NotNull

错误:slick.model.Table 不采用类型参数

光滑的通用和驱动程序无关

如何使用 slick 进行聚合

论文笔记之: Deep Metric Learning via Lifted Structured Feature Embedding

如何使用 slick 创建数据库