【问题标题】:Combining a non-*-projection and "returning" in Slick在 Slick 中结合非*投影和“返回”
【发布时间】:2017-12-03 20:39:40
【问题描述】:

我有两个工作语句可以使用 Slick 在名为 document 的表中插入一行。

第一个插入所有列,取自 row 对象,并返回 Postgres 生成的 ID:

(Tables.Document returning Tables.Document.map(_.id)) +=
    DocumentRow(id=-1, name="Name", fulltext="The text")

第二个忽略名为fulltext的列,只插入name但不返回生成的ID:

Tables.Document.map(r => (r.name)) += ("Name")

如何将两者结合起来(将插入限制为列的子集同时返回生成的 ID)?

背景:

我想从插入中排除全文列的原因是它是 Postgres 类型tsvector,但生成的 Slick 代码将其视为字符串。在插入时,值(即使nullNone)被转换为一些与tsvector 不兼容的文本类型并引发异常。我没有找到在没有额外库的情况下插入tsvector 的解决方案。如果您认为有,请发表评论,我应该遵循这条路。

【问题讨论】:

    标签: postgresql scala slick


    【解决方案1】:

    虽然我相信正确的方法是修复tsvector 问题,但我没有足够的 Postres 经验来帮助您。至于你的解决方法,你可以这样做,代码应该是这样的:

    (Tables.Document.map(r => (r.name)) returning Tables.Document.map(_.id)) += ("Name")
    

    如果将其拆分为多个部分,您可以看到首先创建一个Query,如第二个示例中那样,但不是立即将+= 应用于它,而是首先将其与returning 链接起来,然后才调用@987654326 @。

    附:使用一些额外的 Postres 感知库有什么问题?

    【讨论】:

    • 我不能再复制这个了,但是昨天没有编译! :-) 一定搞砸了括号或其他东西。无论如何,它现在有效。谢谢!
    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多