scala – groupBy方法在Slick中抛出错误
发布时间:2020-12-16 18:02:20 所属栏目:安全 来源:网络整理
导读:代码如下所示: case class Supplier(snum: String,sname: String,status: Int,city: String)class Suppliers(tag: Tag) extends Table[Supplier](tag,"suppliers") { def snum = column[String]("snum") def sname = column[String]("sname") def status =
代码如下所示:
case class Supplier(snum: String,sname: String,status: Int,city: String) class Suppliers(tag: Tag) extends Table[Supplier](tag,"suppliers") { def snum = column[String]("snum") def sname = column[String]("sname") def status = column[Int]("status") def city = column[String]("city") def * = (snum,sname,status,city) <> (Supplier.tupled,Supplier.unapply _) } val suppliers = TableQuery[Suppliers] val gr=suppliers.groupBy(_.city).map{ case (k,v) => (k,v) }.buildColl[Set] 当我编译它时,它会抱怨: Error:(69,43) No matching Shape found. Slick does not know how to map the given types. Possible causes: T in Table[T] does not match your * projection. Or you use an unsupported type in a Query (e.g. scala List). Required level: scala.slick.lifted.FlatShapeLevel Source type: (scala.slick.lifted.Column[String],scala.slick.lifted.Query[A$A113.this.Suppliers,A$A113.this.Supplier,[+A]Seq[A]]) Unpacked type: T Packed type: G lazy val gr=suppliers.groupBy(_.city).map{ case (k,v) }.buildColl[Set] ^ Error:(69,43) not enough arguments for method map: (implicit shape: scala.slick.lifted.Shape[_ <: scala.slick.lifted.FlatShapeLevel,(scala.slick.lifted.Column[String],A$A113.this.Suppliers#TableElementType,Seq]),T,G])scala.slick.lifted.Query[G,Seq]. Unspecified value parameter shape. lazy val gr=suppliers.groupBy(_.city).map{ case (k,v) }.buildColl[Set] ^ 但是如果我将case(k,v)=>(k,v)改为case(k,v.length),它再次起作用. 有没有人有这个想法? 解决方法
原因是:Scala的groupBy返回Map […,Seq […]],换言之,包含其他集合的集合.嵌套的集合!但SQL不支持嵌套集合,它总是返回平面表.支持嵌套集合需要比Slick目前更复杂的从Scala到SQL的转换.因此,Slick禁止这种情况,并要求你让它平坦. case(k,v.length)例如,它将类型转换为Map […,Int]. Slick告诉你通过说要求级别:scala.slick.lifted.FlatShapeLevel.
解决方法是在客户端上进行分组,例如suppliers.run.groupBy(_.city)或Slick 2.2及更高版本的db.run(供应商).groupBy(_.city).在连接的情况下,运行两个查询并在本地加入它们可能更有效,而不是转移笛卡尔积并在之后进行分组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- scala – 播放/记录/打印响应正文/运行枚举器/缓
- WebService大讲堂之Axis2(6):跨服务会话(Sessio
- twitter-bootstrap – 添加切换以选择:bootstra
- angularjs – ng级一次绑定
- 【WebService】3.使用CXF开发WebService客户端
- AngularJS入门(6)-Angular控制器
- 为什么0是真的,但在shell中false是1?
- linux – 什么是/ dev/mapper/vg_root -lv_root
- axis1.4生成代码调用Webservice(备忘)
- Get the parameter of webservice xml
热点阅读