Удаление Scala Slick не работает
-
20-12-2019 - |
Вопрос
при удалении из моего объекта 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
, но, как я уже сказал, я не уверен, меня это тоже сбивает с толку.