Не удается получить доступ к методу удаления в запросе Slick

Это очень очень очень расстраивает. Я уже некоторое время пытаюсь подобрать Слика, но препятствия продолжают появляться. Концепция Slick действительно потрясающая, но ее очень сложно освоить, и, в отличие от Scala, у нее нет стилей «начинающий», «средний» и «продвинутый», где ее могут легко использовать люди на всех этапах.

Я использую Play-Slick (Slick 2.0.0) https://github.com/freekh/play-slick, следуя примеру торта Multi-DB: https://github.com/freekh/play-slick/tree/master/samples/play-slick-cake-sample/app

По какой-то причине, во-первых, ddl не принадлежит TableQuery, в отличие от утверждения в документе: "Метод ddl TableQuery создает DDL". Это видно через scaladoc: http://slick.typesafe.com/doc/2.0.0/api/#scala.slick.lifted.TableQuery Там нет метода ddl.

Во-вторых, мой slick.lifted.Query не может сгенерировать метод delete. Он отлично работает с list, но не с delete.

val S3Files = TableQuery[S3Files]
S3Files.where(_.url === url).delete

Это не сработает... тогда я попробовал:

val query = (for(s <- S3Files if s.url === url) yield s)
query.list  //this works
query.delete //ehh?? can't find the method

val query2 = (for(s <- S3Files if s.url === url))
query2.delete //still won't work

Ну... поскольку Slick использует очень сложную (по крайней мере, для новичков) систему неявного преобразования типов, я действительно не знаю, что пошло не так.


person windweller    schedule 09.03.2014    source источник
comment
Пожалуйста, покажите импорт Slick. Вероятно, с ними что-то не так. И да, расширенное использование имплицитных свойств в Slick может, к сожалению, сбить с толку новичков. Будем надеяться, что прямое встраивание предложит выход из этой ситуации, когда мы найдем время превратить его в полезную альтернативу (или замену) расширенному встраиванию (стандартному API).   -  person cvogt    schedule 10.03.2014
comment
К вашему сведению: в документе метод TableQuery ddl используется как аббревиатура. На самом деле это метод расширения, найденный через неявный.   -  person cvogt    schedule 10.03.2014
comment
@cvogt Да, возможно, вы правы, но я не знаю, какой из них импортировать. Прямо сейчас единственная вещь, связанная со сликом, которую я импортирую, это import play.api.db.slick.Profile   -  person windweller    schedule 10.03.2014
comment
Я расследую это. Возможно, игровой пример следует улучшить.   -  person cvogt    schedule 10.03.2014
comment
@cvogt Спасибо! Я согласен!   -  person windweller    schedule 10.03.2014


Ответы (2)


Я попробовал это, просто добавив

Cats.ddl.create
Cats.filter(_.name===cat.name).delete

до play-slick-cake-sample/app/controllers/Application.scala. У меня работает нормально.

Похоже, вы используете неправильный импорт. Посмотрите на https://github.com/freekh/play-slick/blob/master/samples/play-slick-sample/app/controllers/Application.scala и имитируйте импорт.

person cvogt    schedule 12.04.2014

slick 0.8.1 и slick 2.1.0, и у меня была такая же проблема.

Причина, по которой удаление недоступно в запросе, заключается в том, что запрос play-slick не содержит эквивалентного метода метода удаления из гладкого запроса.

Я решил эту проблему, заменив оригинальный гладкий драйвер.

//import play.api.db.slick.Config.driver.simple._ //play-slick extensional Driver
import slick.driver.PostgresDriver.simple._       //original slick Driver
person Niels    schedule 07.04.2015
comment
Это решение, которое вы сейчас используете? - person Phil; 05.05.2015
comment
Да, я использую импорт slick.driver.PostgresDriver.simple._ - person Niels; 13.05.2015