从我的tablequery对象中删除时,我应该可以写:
FacebookAuths.delete
但它抱怨删除不是TableQuery中的一种方法,即使我尝试:
Users.filter(_.id === 1337).delete
它仍然说删除不是一种方法,但现在在查询对象上。
我做错了什么?我的进口是:
import scala.slick.lifted._
import scala.slick.driver.JdbcDriver.simple._
还有像firstOption这样的所有其他东西。
我使用postgres。
谢谢!
答案 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
特征,因此它不依赖于导入的驱动程序,同样适用于list
和first
以及其他方法,您可以在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
,但正如我所说,我不确定,它看起来也让我感到困惑。