插入不在浮油中工作的对象列表

时间:2017-04-05 04:53:35

标签: scala slick

我使用的是slick3.1.1 我想在DB(postgres)中插入一个对象列表 我编写了以下代码

this.set('itemImage', imgSource);

但是我正在运行多个数据库查询。所以我在某种程度上只调用一个db.run。 所以我写了类似下面的内容

for(user<-x.userList)
{ 
    val users = userClass(user.name,user.id)                
    val userAction = DBAccess.userTable.insertOrUpdate(users)
    val f = DBAccess.db.run(DBIO.seq(userAction))
    Await.result(f, Duration.Inf)        
}

然而,第二篇文章没有写入DB。有人能指出我哪里错了吗?

2 个答案:

答案 0 :(得分:1)

我知道这个年龄很大,但是由于我刚摔倒,我会为此提供更新的答案。

您可以使用++=插入列表。

val usersTable = TableQuery[dbuserTable]
val listToInsert = x.userList.map(userClass(_.name, _.id))
val action = usersTable ++= listToInsert
DBAccess.db.run(action)

这只会执行一次同时插入所有内容的请求。

答案 1 :(得分:0)

+=不会改变您的userQuery。 for循环的每次迭代都会创建一个插入操作,然后立即将其丢弃。

尝试累积插入操作而不是丢弃它们(NB使用yield):

val usersTable = TableQuery[dbuserTable]
val inserts = for (user <- x.userList) yield { 
  val userRow = userClass(user.name, user.id)
  usersTable += userRow                  
}
DBAccess.db.run(DBIO.seq(inserts: _*))