4

在 Slick 1.x 中,使用自动生成的主键插入到表中有点复杂:您必须手动创建一个表投影,为了插入目的而省略了 pk。看起来 Slick 2.x 会解决这个问题:

软插入现在是默认设置,即使用 +=、++=、insert 和 insertAll 插入时会自动跳过 AutoInc 列。这意味着您不再需要单独的投影(没有主键)进行插入。

但是 2.x 文档不得更新:

虽然一些数据库系统允许将正确的值插入 AutoInc 列或插入 None 以获得创建的值,但大多数数据库禁止这种行为,因此您必须确保省略这些列。Slick 还没有自动执行此操作的功能,但计划在未来发布。现在,您必须使用不包含 AutoInc 列的自定义投影查询

有谁知道用 AutoInc 插入表并取回生成的密钥的新 2.0 语法?

4

2 回答 2

2

插入的语法与 1.0 中的相同,只是现在自动忽略 autoinc 列。因此,做什么有语义上的变化.insert。如果您想要旧的行为(包括它们),您必须调用.forceInsert.

于 2013-11-22T15:25:38.697 回答
1
  You can retrieve the generated value like this:

  case class Employee( empName: String,empType: String, empId: Int = 0)
        class Employees(tag: Tag) extends Table[Employee](tag, "emp") {
          def empId = column[Int]("id", O.PrimaryKey, O.AutoInc)
          def empName = column[String]("name", O DBType ("VARCHAR(100)"))
          def empType = column[String]("type")
          def * = (empName, empType, empId) <> (Employee.tupled, Employee.unapply)
        }
        val employees = TableQuery[Employees]
        val myInsert = employees.map(e => (e.empName, e.empType)) returning employees.map(_.empId) 
        val autoGenratedKey = myInsert.insert("satendra", "permanent")
于 2014-02-05T16:38:46.890 回答