La eliminación de Scala Slick no funciona
-
20-12-2019 - |
Pregunta
al eliminar de mi objeto tablequery debería poder escribir:
FacebookAuths.delete
Pero se queja de que eliminar no es un método en TableQuery, incluso si lo intento:
Users.filter(_.id === 1337).delete
Todavía dice que eliminar no es un método, pero ahora en el objeto Consulta.
¿Qué estoy haciendo mal?Mis importaciones son:
import scala.slick.lifted._
import scala.slick.driver.JdbcDriver.simple._
Y todas las demás cosas como firstOption funcionan.
Yo uso postgres.
¡Gracias!
Solución
Tu estas usando Postgres
, entonces necesitas import scala.slick.driver.PostgresDriver.simple._
y scala.slick.driver.PostgresDriver
en vez de jdbc
unos, lo mismo se aplica a donde se define su esquema.
Editar:
Esto está un poco fuera de mi conocimiento y no estoy 100% seguro, pero lo intentaré.
El PostgresDriver
rasgo extiende el JdbcDriver
rasgo (de JdbcProfile.scala
), esta es la firma del rasgo:
trait PostgresDriver extends JdbcDrive
y a la vez JdbcDriver
se extiende SqlDriver
:
trait JdbcDriver extends SqlDriver
El firstOption
El método pertenece al UnitInvoker
rasgo, por lo que no depende de los controladores importados, lo mismo se aplica a list
y first
y otros métodos, puedes consultarlos en Invoker.scala
archivo.El delete
método en cambio se define en el DeleteInvoker
clase dentro del JdbcInvokerComponent
rasgo.
Tengo entendido que al declarar una TableQuery
objeto esta es la firma completa:
val table: PostgresDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
Mientras declaras una tabla con esta firma:
val table: JdbcDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
No sé por qué el delete
El método no está disponible para Jdbc
directamente, probablemente tengas que usar Query
para eso y luego usar Query.deleteInvoker
, pero como dije, no estoy seguro, a mí también me parece confuso.