无法正确使用 slick table 的“*”方法

Can't get the "*" method of a slick table right

我是 Slick 的新用户,我对 table 的“*”方法有疑问。我做错了。这里的代码: 包装型号

import slick.lifted.{ProvenShape, ForeignKeyQuery}
import slick.driver.PostgresDriver.api._

import scala.concurrent.ExecutionContext.Implicits.global

case class Coordonnee (id:Option[Long],
                       email:String,email_publique:Boolean,email_publique_assoc:Boolean,
                       rue:String,rue_publique:Boolean,rue_publique_assoc:Boolean,
                       codepostal:String,codepostal_publique:Boolean,codepostal_publique_assoc:Boolean,
                       ville:String,ville_publique:Boolean,ville_publique_assoc:Boolean,
                       phone:String,phone_publique:Boolean,phone_publique_assoc:Boolean,
                       phonemaison:String,phonemaison_publique:Boolean,phonemaison_publique_assoc:Boolean
                      )
class Coordonnees(tag:Tag) extends extends Table[Coordonnee](tag, "COORDONNEES"){

  def id = column[Long]("COORDONNEES_ID", O.AutoInc, O.PrimaryKey)

  def email = column[String]("EMAIL")
  def email_publique = column[Boolean]("EMAIL_PUBLIQUE")
  def email_publique_assoc = column[Boolean]("EMAIL_PUBLIQUE_ASSOC")

  def rue = column[String]("RUE")
  def rue_publique = column[Boolean]("RUE_PUBLIQUE")
  def rue_publique_assoc = column[Boolean]("RUE_PUBLIQUE_ASSOC")

  def codepostal = column[String]("CODEPOSTAL")
  def codepostal_publique = column[Boolean]("CODEPOSTAL_PUBLIQUE")
  def codepostal_publique_assoc = column[Boolean]("CODEPOSTAL_PUBLIQUE_ASSOC")

  def ville = column[String]("VILLE")
  def ville_publique = column[Boolean]("VILLE_PUBLIQUE")
  def ville_publique_assoc = column[Boolean]("VILLE_PUBLIQUE_ASSOC")

  def phone = column[String]("PHONE")
  def phone_publique = column[Boolean]("PHONE_PUBLIQUE")
  def phone_publique_assoc = column[Boolean]("PHONE_PUBLIQUE_ASSOC")

  def phonemaison = column[String]("PHONEMAISON")
  def phonemaison_publique = column[Boolean]("PHONEMAISON_PUBLIQUE")
  def phonemaison_publique_assoc = column[Boolean]("PHONEMAISON_PUBLIQUE_ASSOC")

  def * : ProvenShape[(Long,
    String,Boolean,Boolean,
    String, Boolean,Boolean,
    String,Boolean,Boolean,
    String,Boolean,Boolean,
    String,Boolean,Boolean,
    String,Boolean,Boolean)]=
    (id,
    email, email_publique, email_publique_assoc,
    rue,rue_publique,rue_publique_assoc,
    codepostal,codepostal_publique, codepostal_publique_assoc,
    ville,ville_publique,ville_publique_assoc,
    phone,phone_publique,phone_publique_assoc,
    phonemaison,phonemaison_publique,phonemaison_publique_assoc
    ) <> (Coordonnee.tupled, Coordonnee.unapply)
}

想法中的错误 IDE 是:

Error:Play 2 Compiler: Required level: slick.lifted.FlatShapeLevel Source type: (slick.lifted.Rep[Long], slick.lifted.Rep[String], slick.lifted.Rep[Boolean], slick.lifted.Rep[Boolean], slick.lifted.Rep[String], slick.lifted.Rep[Boolean], slick.lifted.Rep[Boolean], slick.lifted.Rep[String], slick.lifted.Rep[Boolean], slick.lifted.Rep[Boolean], slick.lifted.Rep[String], slick.lifted.Rep[Boolean], slick.lifted.Rep[Boolean], slick.lifted.Rep[String], slick.lifted.Rep[Boolean], slick.lifted.Rep[Boolean], slick.lifted.Rep[String], slick.lifted.Rep[Boolean], slick.lifted.Rep[Boolean]) Unpacked type: (Option[Long], String, Boolean, Boolean, String, Boolean, Boolean, String, Boolean, Boolean, String, Boolean, Boolean, String, Boolean, Boolean, String, Boolean, Boolean)

我正在使用 Slick v3.1.1。如果我删除

<> (Coordonnee.tupled, Coordonnee.unapply)

它有效,但我需要它。

第一次编辑:根据 pamu

的建议修改 "extends Table[..."

而不是 Table[(....)] 使用 Table[Coordonnee]

代替此代码

 class Coordonnees(tag:Tag) extends Table[(Long,
  String,Boolean,Boolean,
  String, Boolean,Boolean,
  String,Boolean,Boolean,
  String,Boolean,Boolean,
  String,Boolean,Boolean,
  String,Boolean,Boolean

  )](tag, "COORDONNEES") { //.... }

使用此代码

 class Coordonnees(tag:Tag) extends Table[Coordonnee] { //... }

完整的编译代码

import slick.lifted.{ProvenShape, ForeignKeyQuery}
import slick.driver.PostgresDriver.api._

import scala.concurrent.ExecutionContext.Implicits.global

case class Coordonnee(id: Option[Long],
                      email: String, email_publique: Boolean, email_publique_assoc: Boolean,
                      rue: String, rue_publique: Boolean, rue_publique_assoc: Boolean,
                      codepostal: String, codepostal_publique: Boolean, codepostal_publique_assoc: Boolean,
                      ville: String, ville_publique: Boolean, ville_publique_assoc: Boolean,
                      phone: String, phone_publique: Boolean, phone_publique_assoc: Boolean,
                      phonemaison: String, phonemaison_publique: Boolean, phonemaison_publique_assoc: Boolean
                     )

class Coordonnees(tag: Tag) extends Table[Coordonnee](tag, "COORDONNEES") {

  def id = column[Long]("COORDONNEES_ID", O.AutoInc, O.PrimaryKey)

  def email = column[String]("EMAIL")

  def email_publique = column[Boolean]("EMAIL_PUBLIQUE")

  def email_publique_assoc = column[Boolean]("EMAIL_PUBLIQUE_ASSOC")

  def rue = column[String]("RUE")

  def rue_publique = column[Boolean]("RUE_PUBLIQUE")

  def rue_publique_assoc = column[Boolean]("RUE_PUBLIQUE_ASSOC")

  def codepostal = column[String]("CODEPOSTAL")

  def codepostal_publique = column[Boolean]("CODEPOSTAL_PUBLIQUE")

  def codepostal_publique_assoc = column[Boolean]("CODEPOSTAL_PUBLIQUE_ASSOC")

  def ville = column[String]("VILLE")

  def ville_publique = column[Boolean]("VILLE_PUBLIQUE")

  def ville_publique_assoc = column[Boolean]("VILLE_PUBLIQUE_ASSOC")

  def phone = column[String]("PHONE")

  def phone_publique = column[Boolean]("PHONE_PUBLIQUE")

  def phone_publique_assoc = column[Boolean]("PHONE_PUBLIQUE_ASSOC")

  def phonemaison = column[String]("PHONEMAISON")

  def phonemaison_publique = column[Boolean]("PHONEMAISON_PUBLIQUE")

  def phonemaison_publique_assoc = column[Boolean]("PHONEMAISON_PUBLIQUE_ASSOC")

  def *
  = (id.?,
    email, email_publique, email_publique_assoc,
    rue, rue_publique, rue_publique_assoc,
    codepostal, codepostal_publique, codepostal_publique_assoc,
    ville, ville_publique, ville_publique_assoc,
    phone, phone_publique, phone_publique_assoc,
    phonemaison, phonemaison_publique, phonemaison_publique_assoc
    ) <> (Coordonnee.tupled, Coordonnee.unapply)
}

通知中的*方法id替换为id.?