我想向Task表中插入10多行數據,所以我創建了這些記錄的列表。除了我的表,我有一個存儲庫,其中包含諸如創建,更新等功能。所以我可以使用創建一個函數來添加一條記錄,但我想用這個函數批量插入數據。批量插入記錄Slick
case class Task (
idTask: Option[Long],
ownerId: Long,
name: String,
finished: Boolean
)
class TaskTable(tag: Tag) extends Table[Task](tag, "tasks"){
val idTask = column[Long]("id_task", O.PrimaryKey)
val ownerId = column[Long]("owner")
val name = column[String]("name")
val finished = column[Boolean]("finished")
val ownerFk = foreignKey("owner_id_fk", ownerId, TableQuery[UserTable])(_.idUser)
def * = (idTask.?, ownerId, name, finished) <> (Task.apply _ tupled, Task.unapply)
}
object TaskTable{
lazy val table = TableQuery[TaskTable]
}
class TaskRepository(db: Database) {
val taskTableQuery = TableQuery[TaskTable]
def create(task: Task): Future[Task] =
db.run(taskTableQuery returning taskTableQuery += task)
def createTasks(tasks: List[Task]): Future[Option[Task]] =
db.run(taskTableQuery ++= tasks)
def update(task: Task): Future[Int] =
db.run(taskTableQuery.filter(_.idTask === task.idTask).update(task))
def delete(task: Task): Future[Int] =
db.run(taskTableQuery.filter(_.idTask === task.idTask).delete)
def getById(task: Task): Future[Option[Task]] =
db.run(taskTableQuery.filter(_.idTask === task.idTask).result.headOption)
}
我試圖做這樣的事情:
val tasks = List(
Task(Some(1), 1,"Analyze logs with Spark", false),
Task(Some(2), 1,"Clean and process data", false),
...
)
val createTasks = tasks.map(taskRepository.create(_))
但這createTasks值具有類型單位,我不能db.run
或Await.result
運行它。由於返回類型不匹配,我的方法createTasks不能編譯。 那麼如何創建批量插入的方法或更改現有的方法? 我會非常感謝任何幫助!
因爲你所描述的計算,不執行他們你需要使用'map'而不是'foreach'。 –
@SeanVieira你的意思是''users.map(userRepository.create(_))''?但它仍然返回用戶列表作爲''Future [List [User]]'',我不能將它傳遞給''db.run''或''Await.result''函數 – Cassie