Scala 在不运行db.run的情况下读取autoincrement Id,并且在单事务中不使用Slick进行理解
我需要插入到一个表中,并根据返回Id插入到其他表中。无法在Scala集合和DBCollection上运行以进行理解Scala 在不运行db.run的情况下读取autoincrement Id,并且在单事务中不使用Slick进行理解,scala,slick,Scala,Slick,我需要插入到一个表中,并根据返回Id插入到其他表中。无法在Scala集合和DBCollection上运行以进行理解 def savebook(book: Book, bookReaders: Seq[BookReaders]) = { val transformedBookReaders = Seq[BookReaders]() val action1 = bookDAO.insertRow(book).map { id => transformedBookReaders
def savebook(book: Book, bookReaders: Seq[BookReaders]) = {
val transformedBookReaders = Seq[BookReaders]()
val action1 = bookDAO.insertRow(book).map { id =>
transformedBookReaders :+ bookReaders.map { bookReader=> new BookAssociation(None, id, bookReader.moduleId, bookReader.userId, bookReader.roleId) }
}
val action2 = bookAssocDao.insertRows(transformedBookReaders )
db.run(action1.andThen(action2).transactionally)
}
我的第二个操作是不插入任何行。如果在构造
action2
时action1
未运行,则transformedBookReaders
将为空,不会发生任何事情。如果您可以更改action
以生成BookReader
的集合,而不是依赖于副作用,则可以构建action2
def savebook(book: Book, bookReaders: Seq[BookReaders]) = {
val action1 = bookDAO.insertRow(book).map { id =>
bookReaders.map { bookReader=> new BookAssociation(None, id, bookReader.moduleId, bookReader.userId, bookReader.roleId)
}
val action2 = readers => bookAssocDao.insertRows( readers )
db.run(action1.andThen(action2).transactionally)
}
我可能误解了
insertRow()
和insertRows()
的作用。我的要求是在中运行非数据库事务代码以供理解。我需要在中执行DB事务代码时迭代scala集合,以便理解
我找到了一个link(),它很好地解释了如何通过使用DBIO.successful在中运行非数据库事务代码以进行理解
def saveBook(book: Book, bookModules: Seq[BookModule]) = {
def createBookModuleMapping(bookId: Int) = {
bookModules.map { bookModule =>
new bookModule(None, bookId, bookModule.moduleId, bookModule.isActive)
}
}
val action1 = for {
bookId<-bookDao.insert(book)
bookModule <- DBIO.successful(createBookModuleMapping(bookId))
ids <- bookModuleDao.insertRows(bookModule)
} yield ()
db.run(action1.transactionally)
}
def保存本(book:book,bookModules:Seq[BookModule])={
def createBookModuleMapping(bookId:Int)={
bookModules.map{bookModule=>
新建bookModule(无、bookId、bookModule.moduleId、bookModule.isActive)
}
}
val action1=用于{
书呆子