La suppression de Scala Slick ne fonctionne pas
-
20-12-2019 - |
Question
lors de la suppression de mon objet tablequery, je devrais pouvoir écrire :
FacebookAuths.delete
Mais je me plains du fait que delete n'est pas une méthode dans TableQuery, même si j'essaye :
Users.filter(_.id === 1337).delete
Cela dit toujours que delete n'est pas une méthode, mais maintenant sur l'objet Query.
Qu'est-ce que je fais mal?Mes importations sont :
import scala.slick.lifted._
import scala.slick.driver.JdbcDriver.simple._
Et toutes les autres choses comme firstOption fonctionnent.
J'utilise Postgres.
Merci!
La solution
Vous utilisez Postgres
, donc tu dois import scala.slick.driver.PostgresDriver.simple._
et scala.slick.driver.PostgresDriver
à la place du jdbc
ceux-ci, la même chose s'applique à l'endroit où votre schéma est défini.
Modifier:
C'est un peu en dehors de mes connaissances et je ne suis pas sûr à 100% mais je vais essayer.
Le PostgresDriver
trait étend le JdbcDriver
trait (de JdbcProfile.scala
), voici la signature du trait :
trait PostgresDriver extends JdbcDrive
et à son tour JdbcDriver
s'étend SqlDriver
:
trait JdbcDriver extends SqlDriver
Le firstOption
la méthode appartient au UnitInvoker
trait, donc il ne dépend pas des pilotes importés, la même chose s'applique à list
et first
et d'autres méthodes, vous pouvez les enregistrer Invoker.scala
déposer.Le delete
la méthode est plutôt définie dans le DeleteInvoker
classe à l'intérieur du JdbcInvokerComponent
trait.
Je crois comprendre que lorsqu'on déclare un TableQuery
objet voici la signature complète :
val table: PostgresDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
Pendant que vous déclarez une table avec cette signature :
val table: JdbcDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
Je ne sais pas pourquoi le delete
la méthode n'est pas disponible pour Jdbc
directement, vous devrez probablement utiliser Query
pour cela, puis utilisez Query.deleteInvoker
, mais comme je l'ai dit, je ne suis pas sûr, cela me semble aussi déroutant.