如何使用 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 更新多个列?的主要内容,如果未能解决你的问题,请参考以下文章
论文笔记之: Deep Metric Learning via Lifted Structured Feature Embedding