【问题标题】:Can I use Scala List with Slick (Play)?我可以将 Scala List 与 Slick (Play) 一起使用吗?
【发布时间】:2013-07-12 20:26:59
【问题描述】:

我正在尝试存储一个整数列表,这就是我正在做的事情:

型号

case class Score(
  scoresPerTime: List[Int]
)

object Scores extends Table[Score]("SCORES"){
   def scorePerTime = column[List[Int]]("SCORE_PER_TIME")
   //...more code
}

控制器

val form = Form(
  Map(
    "scoresPerTime" -> list(number)
  )(Score.apply)(Score.unapply)
)

我得到一个编译错误

.... could not find implicit value for parameter tm: scala.slick.lifted.TypeMapper[List[Int]][error]   def scorePerTime = column[List[Int]]("SCORE_PER_TIME")

如何解决此问题以输入列表?或者尝试其他选项,例如元组、枚举...

【问题讨论】:

  • 首先:您想要的可能没有问题。只是为了确定:我假设您想将此 List[Int] 保存到单个表列中,例如,作为逗号分隔的字符串或类似字符串。那是对的吗?还是您希望 Slick 生成一个新表,其中包含为您引用的所有 List 项目?
  • @Carsten 我在想 List 中的每个 Int 都会插入到自己的行中。

标签: scala playframework playframework-2.0 slick


【解决方案1】:

您可以通过定义一个类型映射器来做到这一点,例如从 List[Int] 到 String,反之亦然。

一种可能性:

implicit def date2dateTime = MappedTypeMapper.base[List[Int], String](
  list => list mkString ",",
  str => (str split "," map Integer.parseInt).toList
)

我说这是可能的,因为我没有测试过。不确定它返回列表的事实是否会破坏 Slick。一个可能模棱两可的地方是聚合查询,您希望计算, 的数量而不是count(field)(这显然是一个)。

但这完全没有关系。关系方式是创建一个包含两个字段的新表,一个外键引用表SCORES 的一行,另一个字段包含一个SCORE_PER_TIME。外键应该是非唯一索引,因此搜索速度很快。 slick 可以很好地处理这个问题。

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2020-08-04
    • 2018-10-23
    • 2011-02-22
    • 2021-03-16
    相关资源
    最近更新 更多