光滑3.0删除许多作为交易

时间:2015-07-29 06:08:35

标签: scala slick slick-3.0

我从数据库中批量删除了项目,但我想将其作为事务进行处理。在这种情况下,我想要全部或全部动作,删除所有项目并返回成功响应,或者如果一个或多个项目不正确(DB中的非现有项目等)则返回错误。首先,我想对DB中对象的存在进行简单检查,如果所有这些对象都存在,我想执行删除操作或者抛出异常。

不幸的是,根据Stack Overflow上发现的文档和响应,我无法正常工作。

我的行动如下:

def delete(siteIds: Long*): Future[Int] = {
    val filtered = sites.filter(_.id inSet siteIds)

    val action = (for {
      l <- filtered.length.result
      d <- l match {
        case c if c == siteIds.size => filtered.delete
        case _ => DBIO.failed(new InvalidEntityException)
      }
    } yield d) transactionally

    DB.run(action)
}

我也尝试过:

def delete(siteIds: Long*): Future[Int] = {
    val filtered = sites.filter(_.id inSet siteIds)

    val action = filtered.length.result.flatMap(l =>
      if (l == siteIds.size) {
        filtered.delete
      } else {
        DBIO.failed(new InvalidEntityException)
      }
    ) transactionally

    DB.run(action)
}

出于某种原因,@ DBIO.failure @打破了正确的响应。当我运行该代码时,如果数据不正确,则抛出异常,但是如果数据正确,我会收到一个错误,表示某些内容(结果?)为空。

[error]    null (Site.scala:174)
[error] models.SiteDao$$anonfun$22.apply(Site.scala:174)
[error] models.SiteDao$$anonfun$22.apply(Site.scala:171)
[error]    slick.backend.DatabaseComponent$DatabaseDef$$anonfun$runInContext$1.apply(DatabaseComponent.scala:146)
[error] slick.backend.DatabaseComponent$DatabaseDef$$anonfun$runInContext$1.apply(DatabaseComponent.scala:146)

如何让它正常工作?

0 个答案:

没有答案