Scala 将slickless与无形状记录一起使用

Scala 将slickless与无形状记录一起使用,scala,slick,shapeless,Scala,Slick,Shapeless,我一直在尝试使用唱片而不是HLists。我希望它能开箱即用,因为无形状的记录似乎是简单的HLists(带标签),但无光泽的插件无法从记录创建ProvenShape,我想知道为什么 我打算使用slick/codegen模块生成如下表类: class Users( tag: Tag ) extends Table[Record.`'id -> Rep[Long], 'name -> Rep[String], 'age -> Rep[Int]`.T]( tag, "users" )

我一直在尝试使用唱片而不是HLists。我希望它能开箱即用,因为无形状的记录似乎是简单的HLists(带标签),但无光泽的插件无法从记录创建
ProvenShape
,我想知道为什么

我打算使用slick/codegen模块生成如下表类:

class Users( tag: Tag ) extends Table[Record.`'id -> Rep[Long], 'name -> Rep[String], 'age -> Rep[Int]`.T]( tag, "users" ) {
    def id = column[Long]( "id", O.PrimaryKey, O.AutoInc )
    def name = column[String]( "name" )
    def age = column[Int]( "age" )

    val row: Record.`'id -> Rep[Long], 'name -> Rep[String], 'age -> Rep[Int]`.T = {
        ( 'id ->> id ) :: ( 'name ->> name ) :: ( 'age ->> age ) :: HNil
    }

    def * : ProvenShape[Record.`'id -> Rep[Long], 'name -> Rep[String], 'age -> Rep[Int]`.T] = ??? // row
}

object Users extends TableQuery( new Users( _ ) )
但不幸的是,
*=行
分配失败:

[error] Users.scala:19: type mismatch;
[error]  found   : shapeless.::[slick.lifted.Rep[Long] with shapeless.labelled.KeyTag[Symbol with shapeless.tag.Tagged[String("id")],slick.lifted.Rep[Long]],shapeless.::[slick.lifted.Rep[String] with shapeless.labelled.KeyTag[Symbol with shapeless.tag.Tagged[String("name")],slick.lifted.Rep[String]],shapeless.::[slick.lifted.Rep[String] with shapeless.labelled.KeyTag[Symbol with shapeless.tag.Tagged[String("email")],slick.lifted.Rep[String]],shapeless.HNil]]]
[error]  required: slick.lifted.ProvenShape[shapeless.::[slick.lifted.Rep[Long] with shapeless.labelled.KeyTag[Symbol with shapeless.tag.Tagged[String("id")],slick.lifted.Rep[Long]],shapeless.::[slick.lifted.Rep[String] with shapeless.labelled.KeyTag[Symbol with shapeless.tag.Tagged[String("name")],slick.lifted.Rep[String]],shapeless.::[slick.lifted.Rep[String] with shapeless.labelled.KeyTag[Symbol with shapeless.tag.Tagged[String("email")],slick.lifted.Rep[String]],shapeless.HNil]]]]
[error]     def * : ProvenShape[Record.`'id -> Rep[Long], 'name -> Rep[String], 'email -> Rep[String]`.T] = row
[error]                                                                                                     ^
[error] one error found
[error] (data/compile:compileIncremental) Compilation failed
如果它起作用,我将能够以简单且类型安全的方式删除列,这将是一个巨大的收获:

case class User( name: String, age: Int )

add( user: User ) = {
    Users.map( _.row - 'id ) += Generic[User].to( user )
}