【问题标题】:Scala Slick delete not workingScala Slick删除不起作用
【发布时间】:2014-06-03 15:44:25
【问题描述】:

当从我的 tablequery 对象中删除时,我应该能够写:

FacebookAuths.delete

但它抱怨 delete 不是 TableQuery 中的方法,即使我尝试:

Users.filter(_.id === 1337).delete

仍然是说 delete 不是方法,而是现在在 Query 对象上。

我做错了什么?我的进口是:

import scala.slick.lifted._
import scala.slick.driver.JdbcDriver.simple._

所有其他的东西,比如 firstOption 都可以。

我使用 postgres。

谢谢!

【问题讨论】:

    标签: postgresql scala slick


    【解决方案1】:

    您使用的是Postgres,因此您需要import scala.slick.driver.PostgresDriver.simple._scala.slick.driver.PostgresDriver 而不是jdbc,这同样适用于定义架构的位置。

    编辑:

    这有点超出我的知识范围,我不能 100% 确定,但我会试一试。

    PostgresDriver 特征扩展了 JdbcDriver 特征(来自 JdbcProfile.scala),这是特征签名:

    trait PostgresDriver extends JdbcDrive
    

    然后JdbcDriver 扩展SqlDriver

    trait JdbcDriver extends SqlDriver
    

    firstOption 方法属于UnitInvoker trait,因此它不依赖于导入的驱动程序,同样适用于listfirst 和其他方法,您可以在Invoker.scala 文件中查看它们. delete 方法是在 DeleteInvoker 类中的 JdbcInvokerComponent 特征中定义的。

    我的理解是,当声明 TableQuery 对象时,这是完整的签名:

    val table: PostgresDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
    

    当你用这个签名声明一个表时:

    val table: JdbcDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
    

    我不知道为什么delete 方法不能直接用于Jdbc,可能你必须为此使用Query 然后使用Query.deleteInvoker,但正如我所说我不确定,我也觉得很困惑。

    【讨论】:

    • 我现在无法尝试,但其他查询方法(如 list 或 firstOption)与 jdbcDriver 一起工作有点奇怪
    • 嗨,我在没有互联网的情况下度假,但是从 JdbcDriver.simple 到 PostgresDriver.simple 的更改解决了它。谢谢大佬!!
    猜你喜欢
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多