Вопрос

при удалении из моего объекта tablequery я смогу написать:

FacebookAuths.delete

Но он жалуется, что удаление не является методом в TableQuery, даже если я попробую:

Users.filter(_.id === 1337).delete

Он по-прежнему говорит, что удаление не является методом, но теперь для объекта Query.

Что я делаю не так?Мой импорт:

import scala.slick.lifted._
import scala.slick.driver.JdbcDriver.simple._

И все остальные вещи, такие как firstOption, работают.

Я использую постгрес.

Спасибо!

Это было полезно?

Решение

Ты используешь Postgres, поэтому вам нужно import scala.slick.driver.PostgresDriver.simple._ и scala.slick.driver.PostgresDriver вместо jdbc то же самое относится и к тому, где определена ваша схема.

Редактировать:

Это немного за пределами моих знаний, и я не уверен на 100%, но я попробую.

А PostgresDriver черта расширяет JdbcDriver черта (от JdbcProfile.scala), это сигнатура черты:

trait PostgresDriver extends JdbcDrive

и, в свою очередь JdbcDriver простирается SqlDriver:

trait JdbcDriver extends SqlDriver

А firstOption метод принадлежит к UnitInvoker черта, поэтому она не зависит от импортированных драйверов, то же самое относится и к list и first и другие методы, вы можете проверить их в Invoker.scala файл.А delete вместо этого метод определен в DeleteInvoker класс внутри JdbcInvokerComponent черта.

Насколько я понимаю, при объявлении TableQuery объект, это полная подпись:

val table: PostgresDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]

Пока вы объявляете таблицу с этой подписью:

val table: JdbcDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]

Я не знаю, почему delete метод недоступен для Jdbc напрямую, вероятно, вам придется использовать Query для этого, а затем используйте Query.deleteInvoker, но, как я уже сказал, я не уверен, меня это тоже сбивает с толку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top