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
, 하지만 확실하지 않다고 말했듯이 나에게도 혼란스러워 보입니다.