【发布时间】:2018-10-20 17:54:21
【问题描述】:
上一个标题:在理解中编写 DBIO
我不明白,为什么下面的代码甚至无法编译。
我想做什么/背景
对于电影售票条目列表中的每个条目,如果在我的数据库中找到该电影,则插入它。
问题似乎是,我不能在理解中使用 DBIO。这是为什么?是因为我在同一个理解中使用了不同类型的单子吗?
val movieTicketSaleNumbers: List[MovieTicketSale] = cinemaApi.allMovieTicketSales
val insertMetricActions: List[DBIO[UUID]] = for {
movieTicketSaleNumber: MovieTicketSale <- movieTicketSaleNumbers
isInDatabaseAction: DBIO[Option[Movie]] = moviesDb.findOneExact(movieTicketSaleNumber.movie.id)
optionalMovie: Option[Movie] <- isInDatabaseAction
movieInDatabase: Movie <- optionalMovie
insertMovieNumbersInDatabaseAction: DBIO[UUID] = insertMovieTicketSale(movieTicketSaleNumber, movieInDatabase)
movieNumberDbId: UUID <- insertMovieNumbersInDatabaseAction
} yield movieNumberDbId
编译器输出:
[error] found : slick.dbio.DBIOAction[java.util.UUID,slick.dbio.NoStream,slick.dbio.Effect.All]
[error] required: Option[?]
[error] movieNumberDbId: UUID <- insertMovieNumbersInDatabaseAction
[error] ^
[error] [PROJECTPATHPLACEHOLDER]: type mismatch;
[error] found : Option[Nothing]
[error] required: slick.dbio.DBIOAction[?,?,?]
[error] movieInDatabase: Movie <- optionalMovie
[error] ^
[error] [PROJECTPATHPLACEHOLDER]: type mismatch;
[error] found : slick.dbio.DBIOAction[Nothing,Nothing,slick.dbio.Effect.All with slick.dbio.Effect]
[error] required: scala.collection.GenTraversableOnce[?]
[error] optionalMovie: Option[Movie] <- isInDatabaseAction
[error] ^
[error] three errors found
[error] (Compile / compileIncremental) Compilation failed
【问题讨论】: