【问题标题】:Insert Sequence into Database, Slick 3将序列插入数据库,Slick 3
【发布时间】:2016-04-30 23:00:26
【问题描述】:

我想向我的 DAO 添加一个方法,以允许我为我拥有的单个元素插入元素列表而不是单个元素:

def add(userGroup: UserGroup): Future[Int] = {
  dbConfig.db.run(userGroups += userGroup)
}

文档似乎表明我应该能够像这样使用 ++=

def add(userGroups: Seq[UserGroup]): Future[Int] = {
  dbConfig.db.run(userGroups ++= userGroups)
}

http://slick.typesafe.com/doc/3.0.0/queries.html#inserting

但这不起作用, ++= 显然不是它所期望的?

【问题讨论】:

    标签: scala playframework slick


    【解决方案1】:

    ++=TableQuery 添加了一个序列。从您的第二个 sn-p 来看,您似乎只是将 userGroups: Seq[UserGroup] 添加到自身而不是 TableQuery 实例。

    如果您的第一个 sn-p 有效,则将 userGroups: Seq[UserGroup] 添加到 this.userGroups 即可。

    def add(userGroups: Seq[UserGroup]): Future[Int] = {
      dbConfig.db.run(this.userGroups ++= userGroups)
    }
    

    【讨论】:

    • 你完全正确!只是一个愚蠢的命名问题,我想我需要休息一下
    【解决方案2】:

    对于现在遇到这个问题的每个人(使用 Slick 3.2 及更高版本):返回类型不是Future[Int],而是Future[Option[Int]]。原因是并非所有数据库实际上都返回许多插入的行。文档描述了它here

    所以较新版本的 Slick 中的代码必须如下所示:

    def add(userGroups: Seq[UserGroup]): Future[Option[Int]] = {
      dbConfig.db.run(this.userGroups ++= userGroups)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多