Scala Liso delete não funciona
-
20-12-2019 - |
Pergunta
ao excluir do meu tablequery objeto que eu deveria ser capaz de escrever:
FacebookAuths.delete
Mas é queixando-se de que excluir não é um método em TableQuery, mesmo se eu tentar:
Users.filter(_.id === 1337).delete
Ele ainda está dizendo que excluir não é um método, mas, agora, sobre o objeto de Consulta.
O que estou fazendo de errado?Meu importações são:
import scala.slick.lifted._
import scala.slick.driver.JdbcDriver.simple._
E todas as outras coisas como firstOption obras.
Eu uso o postgres.
Obrigado!
Solução
Você está usando Postgres
, então você precisa import scala.slick.driver.PostgresDriver.simple._
e scala.slick.driver.PostgresDriver
em vez de o jdbc
queridos, a mesma coisa se aplica para onde o esquema é definido.
Editar:
Isso é um pouco fora do meu conhecimento e eu não tenho 100% de certeza, mas eu vou dar uma chance.
O PostgresDriver
traço estende a JdbcDriver
traço (a partir de JdbcProfile.scala
), este é o traço de assinatura:
trait PostgresDriver extends JdbcDrive
e por sua vez JdbcDriver
estende-se SqlDriver
:
trait JdbcDriver extends SqlDriver
O firstOption
método pertence ao UnitInvoker
traço, portanto, não depende do importado drivers, a mesma coisa se aplica para list
e first
e outros métodos, você pode verificá-los no Invoker.scala
arquivo.O delete
método em vez disso, é definida no DeleteInvoker
classe dentro da JdbcInvokerComponent
traço.
Meu entendimento é que quando declarar uma TableQuery
objeto este é o total de assinaturas:
val table: PostgresDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
Enquanto você está declarando uma tabela com este assinatura:
val table: JdbcDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]
Eu não sei por que a delete
método não está disponível para Jdbc
diretamente, provavelmente, você tem que usar Query
para que e, em seguida, usar Query.deleteInvoker
, mas como eu disse eu não tenho certeza, parece confuso para mim também.