加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Slick左/右/外连接与选项

发布时间:2020-12-16 09:34:51 所属栏目:安全 来源:网络整理
导读:在Slick示例中,有几个连接示例,其中一个结果列可以为空,因为执行左,右或外部连接时可能会出现这种情况。例如: val explicitLeftOuterJoin = for { (c,s) - Coffees leftJoin Suppliers on (_.supID === _.id)} yield (c.name,s.name.?) 但是如果我想要
在Slick示例中,有几个连接示例,其中一个结果列可以为空,因为执行左,右或外部连接时可能会出现这种情况。例如:

val explicitLeftOuterJoin = for {
  (c,s) <- Coffees leftJoin Suppliers on (_.supID === _.id)
} yield (c.name,s.name.?)

但是如果我想要返回整个映射对象呢?我的意思是:

val explicitLeftOuterJoin = for {
  (c,s) <- Coffees leftJoin Suppliers on (_.supID === _.id)
} yield (c,s.?)

这似乎不起作用,因为它抱怨“无法找到类型为scala.slick.lifted.TypeMapper [供应商]的证据参数的隐含值。基本上我希望它返回一个元组列表(Coffee,Option [Supplier])

为什么这不工作,它的修复是什么?特别是,因为这样做很好:

val q = for {
  c <- Coffees
  s <- Suppliers
} yield (c,s)

(我知道这是一个内部联盟)

解决方法

更新:这将被解决,并且在2014年底的Slick 3.0中工作,不再需要以下解决方法

这是Slick目前的限制。你必须打电话。在每一列单独。然而,您可以放置??一个名为在表类中,这样做在一个中心位置,从而得到。完整的行。这个play-slick example code包含涉及一些生成的代码的通用解决方案。我们也有一个PR that adds auto-generation of a ? method排队。

从长远来看,我们将支持Slick中外部连接的变体,Slick完全了解所涉及的类型,您不需要指定。任何地方。现在我们必须生活在涉及代码生成的解决方法中。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读