Domanda

quando elimino dal mio oggetto tablequery dovrei essere in grado di scrivere:

FacebookAuths.delete

Ma si lamenta che delete non è un metodo in TableQuery, anche se ci provo:

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

Sta ancora dicendo che delete non è un metodo, ma ora sull'oggetto Query.

Cosa sto facendo di sbagliato?Le mie importazioni sono:

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

E tutte le altre cose come firstOption funziona.

Io uso postgres.

Grazie!

È stato utile?

Soluzione

Stai usando Postgres, così Lei ha bisogno di import scala.slick.driver.PostgresDriver.simple._ e scala.slick.driver.PostgresDriver invece del jdbc quelli, la stessa cosa si applica a dove è definito il tuo schema.

Modificare:

Questo è un po ' al di fuori della mia conoscenza e non sono sicuro al 100%, ma farò un tentativo.

Il PostgresDriver tratto estende il JdbcDriver tratto (da JdbcProfile.scala), questa è la firma del tratto:

trait PostgresDriver extends JdbcDrive

e a sua volta JdbcDriver estendere SqlDriver:

trait JdbcDriver extends SqlDriver

Il firstOption il metodo appartiene al UnitInvoker tratto, quindi non dipende dai driver importati, la stessa cosa vale per list e first e altri metodi, puoi controllarli Invoker.scala file.Il delete il metodo invece è definito nel DeleteInvoker classe all'interno del JdbcInvokerComponent tratto.

La mia comprensione è che quando si dichiara un TableQuery oggetto questa è la firma completa:

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

Mentre stai dichiarando una tabella con questa firma:

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

Non capisco perché il delete il metodo non è disponibile per Jdbc direttamente, probabilmente devi usare Query per questo e quindi utilizzare Query.deleteInvoker, ma come ho detto non sono sicuro, sembra confuso anche a me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top