Scala Slick 仅存储案例的选定字段 class
Scala Slick store only selected fields of the case class
我有2个案例类
case class PPU(id : String,
name : String,
mini_ppus : List[MiniPPU]..)
case class MiniPPU( minPpuId : String,
ppu_id : String.. )
我有一个 PPU table 并且只想存储 ID 和名称而不是 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")
}
每当我尝试 select 来自 table 的内容时,我都会收到错误消息:
java.lang.ClassCastException: slick.relational.RelationalTableComponent$Table$$anon cannot be cast to java.lang.String
覆盖 def * 方法的正确方法是什么?
而不是这个:
{ tuple: (String,String) => PPU(id.asInstanceOf[String], name.asInstanceOf[String], ListBuffer[MiniPPU]().toList)}
试试这个:
{ tuple: (String, String) => PPU(tuple._1, tuple._2, ListBuffer[MiniPPU]().toList)}
使用元组中的值,而不是 <>
之前声明的值
我有2个案例类
case class PPU(id : String,
name : String,
mini_ppus : List[MiniPPU]..)
case class MiniPPU( minPpuId : String,
ppu_id : String.. )
我有一个 PPU table 并且只想存储 ID 和名称而不是 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")
}
每当我尝试 select 来自 table 的内容时,我都会收到错误消息:
java.lang.ClassCastException: slick.relational.RelationalTableComponent$Table$$anon cannot be cast to java.lang.String
覆盖 def * 方法的正确方法是什么?
而不是这个:
{ tuple: (String,String) => PPU(id.asInstanceOf[String], name.asInstanceOf[String], ListBuffer[MiniPPU]().toList)}
试试这个:
{ tuple: (String, String) => PPU(tuple._1, tuple._2, ListBuffer[MiniPPU]().toList)}
使用元组中的值,而不是 <>