Slick 3.0批量插入返回对象的顺序

时间:2015-12-10 10:13:51

标签: scala jdbc slick

我想使用Slick 3.0 ++ =函数进行批量插入,并使用返回来返回插入的对象。

我想知道返回对象(Future [Seq [Something]])是否与我的参数Seq [Something](没有id)具有相同的顺序。

更具体地说,

val personList: Seq[Person] = Seq(Person("name1"), Person("name2"), Person("name3"))
persons returning persons ++= personList

结果肯定是Future(Seq(Person(1,“name1”),Person(2,“name2”),Person(3,“name3”)))?或者可以是其他结果顺序?

感谢。

2 个答案:

答案 0 :(得分:4)

是的,我相信您使用的是自动递增的主键。 我也和你提到的一样:

 case class Person(name: String, id: Option[Int] = None)

 class PersonTable(tag: Tag) extends Table[Person](tag, "person") {
    val id = column[Int]("id", O.PrimaryKey, O.AutoInc)
    val name = column[String]("name")
     def * = (name, id.?) <> (Person.tupled, Person.unapply)
  }

 val personTableQuery = TableQuery[PersonTable]

 def personTableAutoIncWithObject = 
     (personTableQuery returning personTableQuery.map(_.id)).into((person, id) => person.copy(id = Some(id)))

  // insert all person without id  and return all person with their id.
 def insertAll(persons: List[Person]): Future[Seq[Person]] =
   db.run { personTableAutoIncWithObject ++= persons }


//unit test for insertion order:
 test("Add new persons ") {
   val response = insertAll(List(Person("A1"), Person("A2"),   Person("A3"), Person("A4"), Person("A5")))
    whenReady(response) { persons =>
        assert(persons === List(Person("A1", Some(1)), Person("A2",    Some(2)), Person("A3", Some(3)),
    Person("A4", Some(4)), Person("A5", Some(5))))
  }
 }       

答案 1 :(得分:0)

据我所知,批量插入的结果与发送到数据库的顺序相同,“++ =”函数将返回插入表中的记录数。