سكالا بقعة حذف لا يعمل
-
20-12-2019 - |
سؤال
عند حذف من كائن تابليكيري يجب أن أكون قادرا على الكتابة:
FacebookAuths.delete
لكنها تشكو من أن الحذف ليس طريقة في تابلكيري ، حتى لو حاولت:
Users.filter(_.id === 1337).delete
لا يزال يقول أن الحذف ليس طريقة ، ولكن الآن على كائن الاستعلام.
ماذا أفعل خطأ?وارداتي هي:
import scala.slick.lifted._
import scala.slick.driver.JdbcDriver.simple._
وجميع الأشياء الأخرى مثل فيرستوبتيون يعمل.
يمكنني استخدام بوستغرس.
شكراً!
المحلول
أنت تستخدم 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
, ، لكن كما قلت لست متأكدا ، يبدو الأمر محيرا بالنسبة لي أيضا.