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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top