【问题标题】:Scala Slick store only selected fields of the case classScala Slick 仅存储案例类的选定字段
【发布时间】:2021-09-23 23:28:55
【问题描述】:

我有 2 个案例类

case class PPU(id : String,
           name : String,
           mini_ppus : List[MiniPPU]..)

case class MiniPPU( minPpuId : String,
                ppu_id : String.. )

我有一个 PPU 表,只想存储 id 和 name,而不是 mini_ppus。

class PpuTable(tag: Tag) extends Table[PPU](tag, None, _tableName ="ppu") {

def * = (id, name) <> (
{ tuple: (String,String) => 
PPU(id.asInstanceOf[String], name.asInstanceOf[String], ListBuffer[MiniPPU]().toList)},
{ ppuTable: PPU => Option(ppuTable.id, ppuTable.name) }
)

   val id = column[String]("ppu_id", O.PrimaryKey)
   val name: Rep[String] = column[String]("name")
}

每当我尝试从表中选择某些内容时,我都会收到错误消息:

java.lang.ClassCastException: slick.relational.RelationalTableComponent$Table$$anon$1 cannot be cast to java.lang.String

重写 def * 方法的正确方法是什么?

【问题讨论】:

    标签: scala slick slick-3.0


    【解决方案1】:

    而不是这个:

    { tuple: (String,String) => PPU(id.asInstanceOf[String], name.asInstanceOf[String], ListBuffer[MiniPPU]().toList)}
    

    试试这个:

    { tuple: (String, String) => PPU(tuple._1, tuple._2, ListBuffer[MiniPPU]().toList)}
    

    使用元组中的值,而不是&lt;&gt;之前声明的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 2019-09-09
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多