Scala Slick Delete funktioniert nicht
-
20-12-2019 - |
Frage
beim Löschen aus meinem Tablequery-Objekt sollte ich schreiben können:
FacebookAuths.delete
Aber es beschwert sich, dass delete keine Methode in TableQuery ist, selbst wenn ich es versuche:
Users.filter(_.id === 1337).delete
Es heißt immer noch, dass delete keine Methode ist, sondern jetzt für das Abfrageobjekt.
Was mache ich falsch?Meine Importe sind:
import scala.slick.lifted._
import scala.slick.driver.JdbcDriver.simple._
Und alle anderen Dinge wie firstOption funktionieren.
Ich benutze Postgres.
Danke!
Lösung
Du verwendest Postgres
, also musst du import scala.slick.driver.PostgresDriver.simple._
und scala.slick.driver.PostgresDriver
anstelle der jdbc
das Gleiche gilt für den Ort, an dem Ihr Schema definiert ist.
Bearbeiten:
Das ist ein bisschen außerhalb meines Wissens und ich bin mir nicht 100% sicher, aber ich werde es versuchen.
Der PostgresDriver
eigenschaft erweitert die JdbcDriver
merkmal (von JdbcProfile.scala
), dies ist die Eigenschaftssignatur:
trait PostgresDriver extends JdbcDrive
und der Reihe nach JdbcDriver
erweitern SqlDriver
:
trait JdbcDriver extends SqlDriver
Der firstOption
methode gehört zu den UnitInvoker
eigenschaft, also ist es nicht abhängig von den importierten Treibern, das gleiche gilt für list
und first
und andere Methoden, Sie können sie einchecken Invoker.scala
Datei.Der delete
methode ist stattdessen in der definiert DeleteInvoker
klasse innerhalb der JdbcInvokerComponent
Merkmal.
Mein Verständnis ist, dass bei der Deklaration eines TableQuery
objekt dies ist die vollständige Signatur:
val table: PostgresDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
Während Sie eine Tabelle mit dieser Signatur deklarieren:
val table: JdbcDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
Ich weiß nicht, warum die delete
methode ist nicht verfügbar für Jdbc
direkt, wahrscheinlich müssen Sie verwenden Query
dafür und dann benutze Query.deleteInvoker
, aber wie gesagt, ich bin mir nicht sicher, es sieht auch für mich verwirrend aus.