scala slick 一对多集合

2024-03-19

我有一个数据库,其中包含具有一对多注册关系的活动。 目标是获取所有活动及其注册列表。

通过创建带有注册的活动的笛卡尔积,获取该数据所需的所有数据都已存在。 但我似乎找不到一个好的方法来将它正确地放入 scala 集合中; 让我们输入:Seq[(Activity, Seq[Registration])]

case class Registration(
  id: Option[Int],
  user: Int,
  activity: Int
)

case class Activity(
  id: Option[Int],
  what: String,
  when: DateTime,
  where: String,
  description: String,
  price: Double
)

假设存在适当的光滑表和表查询,我会写:

val acts_regs = (for {
   a <- Activities
   r <- Registrations if r.activityId === a.id
} yield (a, r))
  .groupBy(_._1.id)
  .map { case (actid, acts) => ??? }
}

但我似乎无法做出适当的映射。这样做的惯用方法是什么?我希望它比使用原始笛卡尔积更好......

In Scala

在 scala 代码中,这很简单,看起来像这样:

  val activities = db withSession { implicit sess =>
    (for {
      a <- Activities leftJoin Registrations on (_.id === _.activityId)
    } yield a).list
  }

  activities
    .groupBy(_._1.id)
    .map { case (id, set) => (set(0)._1, set.map(_._2)) }

但这似乎效率相当低,因为表映射器将为您创建不必要的 Activity 实例。 看起来也不是很优雅...

获取注册计数

当只对注册计数感兴趣时,scala 方法甚至更糟,如下所示:

val result: Seq[Activity, Int] = ???

In Slick

我在光滑方面的最佳尝试如下:

  val activities = db withSession { implicit sess =>
    (for {
      a <- Activities leftJoin Registrations on (_.id === _.activityId)
    } yield a)
      .groupBy(_._1.id)
      .map { case (id, results) => (results.map(_._1), results.length) }
  }

但这会导致错误,即 slick 无法映射“map”行中的给定类型。


我会建议:

  val activities = db withSession { implicit sess =>
    (for {
      a <- Activities leftJoin Registrations on (_.id === _.activityId)
    } yield a)
      .groupBy(_._1)
      .map { case (activity, results) => (activity, results.length) }
  }

问题在于

  val activities = db withSession { implicit sess =>
    (for {
      a <- Activities leftJoin Registrations on (_.id === _.activityId)
    } yield a)
      .groupBy(_._1.id)
      .map { case (id, results) => (results.map(_._1), results.length) }
  }

是你不能在 group by 中产生嵌套结果。results.map(_._1)是项目的集合。在某些情况下,SQL 会执行从集合到单行的隐式转换,但类型安全的 Slick 不会这样做。你想在 Slick 中做的事情是这样的results.map(_._1).head,但目前不支持。你能得到的最接近的东西是这样的(results.map(_.id).max, results.map(_.what).max, ...),这非常乏味。因此,按整个活动行分组可能是目前最可行的解决方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scala slick 一对多集合 的相关文章

  • 如何使用 Spark 执行插入覆盖?

    我正在尝试将我们的 ETL Hive 脚本之一转换为 Spark 其中 Hive ETL 脚本维护一个表 其中需要在每晚新同步之前删除部分数据 Hive ETL 使用插入覆盖的方式将主表删除超过 3 天的数据 基本上创建一个临时表 其中的数
  • 一般重写 Scala 案例类

    是否可以通用地替换案例类中的参数 更具体地说 假设我想要一个接收 查找 案例类和 替换 案例类 如语法规则的左侧和右侧 以及目标案例类的替代函数 并且该函数将返回将查找案例类的参数替换为替换案例类的新案例类 该函数还可以简单地采用一个案例类
  • 如何用 Scala 编写毕达哥拉斯定理?

    直角三角形斜边的平方等于另外两条边的平方和 这就是毕达哥拉斯定理 根据斜边长度 a 和 b 计算斜边的函数将返回 sqrt a a b b 问题是 您如何在 Scala 中定义这样一个函数 使其可以与实现适当方法的任何类型一起使用 对于上下
  • 将案例类传递给函数参数

    抱歉问了一个简单的问题 我想将案例类传递给函数参数 并且想在函数内部进一步使用它 到目前为止我已经尝试过这个TypeTag and ClassTag但由于某种原因 我无法正确使用它 或者可能是我没有看到正确的位置 用例与此类似 case c
  • 使用 vs code,如何让 scala 格式工作并格式化我的代码?

    我的多项目 sbt 存储库中有 scala 格式插件 addSbtPlugin org scalameta sbt scalafmt 2 3 2 所以在 sbt 控制台中如果我运行 scalafmt 它工作正常 我的 build sbt 有
  • Scala 中的多个类型下限

    我注意到tuple productIterator总是返回一个Iterator Any 想知道是否无法设置多个下限 因此它可能是最低公共超类型的迭代器 我尝试并搜索了一下 但只发现this https stackoverflow com q
  • 如何使用 Apache Livy 设置 Spark 配置属性?

    我不知道在向 Apache Livy 提交 Spark 作业时如何以编程方式传递 SparkSession 参数 这是测试 Spark 作业 class Test extends Job Int override def call jc J
  • Scala 和 Spark:Windows 上的 Dataframe.write._

    有人设法使用 Spark 写入文件 尤其是 CSV 吗 数据框 http spark apache org docs latest api scala index html org apache spark sql Dataset在 Win
  • 实施策略模式的函数式方法

    我正在尝试解决一个处理从一种温度单位到另一种温度单位 摄氏度 开尔文 华氏度 转换的问题 在Java中 我需要创建一个接口并提供多个实现来封装输入类型并将结果作为输出类型的单元返回 例如开尔文到摄氏度或摄氏度到华氏度等 我已经在 scala
  • JavaFx ComboBox 绑定混乱

    我有一个 I18N 实现 它通过属性绑定 JavaFX UI 元素 例如 def translateLabel l Label key String args Any Unit l textProperty bind createStrin
  • 实现一个scala集合,以便map、filter等产生正确的类型

    我正在尝试实施一个默认值映射 https stackoverflow com questions 3187411 designing a convenient default valued map in scala 我想要过滤器 地图等De
  • 如何使用 Scala 在 Spark 中漂亮地打印 JSON 数据帧?

    我有一个数据帧 我想将其作为有效的 json 写入 json 文件 我当前的代码如下所示 val df DataFrame myFun df toJSON saveAsTextFile myFile json 输出的格式为 如何将文件内容组
  • Twitter Future 与 Scala Future 相比有何优势?

    我知道 Scala Future 变得更好的很多原因 有什么理由改用 Twitter Future 吗 除了 Finagle 使用它这一事实之外 免责声明 我在 Twitter 负责 Future 的实施 一点背景知识 在 Scala 有一
  • Scala - Java = ? (或者 Clojure - Java = ?)

    开发人员可以在不懂 Java 的情况下使用 Scala 吗 开发人员可以在不懂 Java 的情况下使用 Clojure 吗 注意 例如 我是一名 C 开发人员 我在不了解任何 VB 的情况下使用 NET 当然 WF 4 0 使用 VB 进行
  • Spark Scala:按小时或分钟计算两列的 DateDiff

    我在数据框中有两个时间戳列 我想获取它们的分钟差异 或者小时差异 目前我可以通过四舍五入获得日差 val df2 df1 withColumn time datediff df1 ts1 df1 ts2 但是 当我查看文档页面时https
  • Spark:替换嵌套列中的空值

    我想更换所有n a以下数据框中的值unknown 它可以是scalar or complex nested column 如果它是一个StructField column我可以循环遍历列并替换n a using WithColumn 但我希
  • Spark - scala - 如何检查配置单元中是否存在表

    我必须使用 Spark 1 6 2 scala 检查配置单元中是否存在表 如果没有 我必须创建一个空数据框并将其保存为配置单元表 如果存在 则覆盖现有表 我需要一个返回布尔值的函数 基于该函数我可以做出上述决定 是否创建新表或覆盖现有表 1
  • “函数是第一等值”这到底是什么意思?

    有人可以用一些很好的例子清楚地解释它吗 在解释函数式编程时 我在 Scala 中遇到了这句话 一流 并不是一个正式定义的概念 但它通常意味着一个实体具有三个属性 有可能used 不受限制 只要 普通 值可以 即从函数传递和返回 放入容器等
  • Scala Function.tupled 和 Function.untupled 等效于变量 arity,或者使用元组调用变量 arity 函数

    昨晚我试图围绕接受和调用通用函数做一些事情 即类型在调用站点上已知 但可能因调用站点而异 因此定义应该是跨参数通用的 例如 假设我有一个函数f A B C gt Z 其实这样的还有很多fs 我事先不知道 所以我无法确定类型或数量A B C
  • Scala REPL 中的递归重载语义 - JVM 语言

    使用 Scala 的命令行 REPL def foo x Int Unit def foo x String Unit println foo 2 gives error type mismatch found Int 2 required

随机推荐

  • SpriteKit didBeginContact 被调用但没有 didEndContact

    我有以下代码 didBeginContact contact 方法已被调用但未调用didEndContact contact FIXME This is a workaround until class vars are supported
  • 在没有数据库的情况下如何使用 Rails/Devise?

    我正在创建一个不使用数据库的 Rails 应用程序 相反 该模型是使用包装遗留系统的 Ruby API 进行管理的 我有一个 Ruby 调用 可以让我验证用户名 密码组合 在这种情况下是否可以使用 Devise 或其他现成的身份验证解决方案
  • 无法设置远程应答 sdp:无法下推传输描述:无法为通道设置 SSL 角色

    我正在使用 webRTC 构建一个支持音频通话的系统 它的工作原理如下 用户AcreateOffer then setLocalDescription与offer 用户BreceiveOffer then setRemoteDescript
  • 安装 mysql-community-server 时出现 GPG 密钥问题

    安装时mysql 社区服务器出现以下错误 Command sudo yum install mysql community server Error warning var cache yum x86 64 2 mysql57 commun
  • 我什么时候应该使用 PHP 会话、浏览器本地存储和 JavaScript 对象参数?

    什么时候适合使用现代基于 AJAX 的应用程序存储数据的多种不同方式 我希望能够为开发人员提供一些具体的指导方针 这是我到目前为止所看到的 而且越来越混乱 PHP 服务器端会话 PHP 会话数据可能是存储基于会话的信息的最古老的方法 我经常
  • 带有聚合数据的堆叠条形图 (ggplot2)

    我在使用 ggplot2 时遇到一些主要问题 尽管这对你来说可能是一个非常简单的问题 但我还无法正确回答 我读过一本 ggplot2 书 并且也在 stackoverflow 上查找 最初有一个由因子变量 国家 和二分变量组成的数据集 不幸
  • Visual Studio 链接器警告 LNK4098

    我有一个 dll 项目 在发布配置中构建该项目时 我收到以下警告 MSVCRT lib cinitexe obj 警告 LNK4098 默认库 msvcrtd lib 与其他库的使用冲突 使用 NODEFAULTLIB 库 这只是一个警告
  • C# linq 支持“反连接”语义吗?

    我用谷歌搜索了一段时间 没有找到直接的反连接语义示例 以 C LINQ 为例 如何做到这一点 An 反连接基本上 一组不包含在另一组数据中的数据可以表示为Linq与一个IEnumerable Except像这样 double numbers
  • pod install 给出与 ruby​​ gems 和 libffi 相关的错误

    我使用react native init 创建一个应用程序 并在iOS 文件夹中运行pod install 但是 我收到以下错误 System Library Frameworks Ruby framework Versions 2 6 u
  • 在使用 Rails 保存之前将字符串转换为日期

    对 Ruby 很陌生 我已经被困了好几个小时了 到处寻找也找不到答案 所以我使用 Rails gem 的引导日期选择器 因为我更改了日期选择器的日期格式 所以它不会存储在数据库中 猜测这是因为 simple form 输入被用作字符串 以避
  • 如何使用 ajax 请求发送 Twitter OAuth 访问令牌?

    我想在使用 OAuth 通过 用 twitter 签名 进行身份验证后加载用户的主页时间线 我正在使用这个库来处理身份验证部分https github com jmathai twitter async https github com j
  • 登录 WordPress 网站时如何显示用户的用户名?

    当用户登录到我的 WordPress 网站时 我希望我的网站标题显示 登录身份 我不知道如何回显当前用户的用户名 这是我得到的代码
  • 改变python shell的背景颜色

    例如 是否可以将 Python Shell 的背景颜色从白色更改为黑色 我确实找到了如何更改文本颜色 但不知道如何更改背景颜色 我是在Windows下运行的 有什么建议么 如果您指的是 IDLE 我通过此链接执行了这个简单的步骤 适用于 u
  • 使用列表理解在列表元素前面添加前缀

    有一个这样的列表 foo spam bar 使用列表理解是否可以获取此列表作为结果 foo ok foo spam ok spam bar ok bar In 67 alist foo spam bar In 70 prefix elt f
  • 如何使用 JavaScript 打开新选项卡/窗口?

    客观的 我想在新选项卡 窗口中打开 URLEXACT与 target blank 相同的方式 Code 我正在使用触发以下 JavaScript 的 PHP 条件 我的问题 window open 是不一样作为 target blank 超
  • 为什么 Java 源文件要进入目录结构?

    假设我正在创建一个包含以下类的 Java 项目 com bharani ClassOne com bharani ClassTwo com bharani helper HelperOne com bharani helper suppor
  • 如何从泽西岛 1.0 迁移到泽西岛 2.0?

    我正在尝试升级到 Jersey 2 0 但遇到了很多麻烦 因为 Jersey 的 groupIds 和artifactIds 已完全更改 并且我在 中找不到迁移计划泽西岛文档 https jersey java net nonav docu
  • Google Play 商店的 RSS 源

    Apple 应用程序商店为您提供 RSS 源 以便将提交到应用程序商店的最新应用程序发送到您最喜欢的源阅读器中 我想知道 google play 商店是否也有 RSS feed 可以让你做同样的事情 Thanks 不 他们不提供任何供第三方
  • 您能否提供一些与在项目中使用的人工智能相关的主题想法? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • scala slick 一对多集合

    我有一个数据库 其中包含具有一对多注册关系的活动 目标是获取所有活动及其注册列表 通过创建带有注册的活动的笛卡尔积 获取该数据所需的所有数据都已存在 但我似乎找不到一个好的方法来将它正确地放入 scala 集合中 让我们输入 Seq Act