Scala Slick删除不起作用

时间:2014-06-02 18:12:44

标签: postgresql scala slick

从我的tablequery对象中删除时,我应该可以写:

FacebookAuths.delete

但它抱怨删除不是TableQuery中的一种方法,即使我尝试:

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

它仍然说删除不是一种方法,但现在在查询对象上。

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

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

还有像firstOption这样的所有其他东西。

我使用postgres。

谢谢!

1 个答案:

答案 0 :(得分:2)

您使用的是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特征,因此它不依赖于导入的驱动程序,同样适用于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,但正如我所说,我不确定,它看起来也让我感到困惑。