scala - 使用光滑的多个左连接?

标签 scala slick slick-3.0

我有以下光滑的实体:

class Person(personId, houseId, carId)
class House(houseId)
class Car(carId)

我想选择一个人及其可选的房屋和汽车,我的查询是:

val query = personTable
      .filter(_.personId === personId)
      .joinLeft(houseTable)
      .on(_.houseId === _.houseId)
      .joinLeft(carTable)
      .on(_._1.carId === _.carId)
      .result
      .headOption

但是,查询的返回类型看起来有点有趣,我希望它是一个元组(人,房子,汽车):

Option[(Person, Option[House], Option[Car])]

但它实际上是一个元组(元组(人,房子),汽车):

Option[((Person, Option[House]), Option[Car])]

返回的数据看起来确实正确,只是结构不寻常,也许我没有正确执行上面的多重连接?

最佳答案

在我看来一切都很正常。

如果您不喜欢当前的数据类型,可以在查询中映射来更改它,例如:

val query = personTable
      .filter(_.personId === personId)
      .joinLeft(houseTable)
      .on(_.houseId === _.houseId)
      .joinLeft(carTable)
      .on(_._1.carId === _.carId)
      .map{case((person, houseOpt), carOpt) => (person, houseOpt, carOpt)}
      .result
      .headOption

关于scala - 使用光滑的多个左连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52758408/

相关文章:

java - 将 java enum 转换为 scala Enumeration 以进行 json4s 序列化

scala - ne 是比 != 更好的检查 null 的方法吗?

scala - 如何使用 Play with Scala 和 Slick 从数据库中获取记录

scala - 如何使用 slick 进行聚合

java - 为什么我的 PlayFramework 应用程序出现很长的超时?

scala - 使用 Spray 发送大文件

scala - 如何使方法通用而不得到 "No matching Shape found"

scala - 如何使用 Slick 的 insertOrUpdate 返回整行

scala - 如何向 Slick 表添加方法?

scala - 使用 Play with Scala 和 Slick 在不同文件上的表之间建立一对多关系