是否会简化使用自动生成的主键插入表格?

时间:2013-11-22 14:44:54

标签: database scala slick-2.0

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

  

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

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

  

虽然某些数据库系统允许在AutoInc列中插入适当的值或插入None来获取创建的值,但大多数数据库都禁止此行为,因此您必须确保省略这些列。 Slick还没有自动执行此功能的功能,但计划在将来发布。目前,您必须使用带有自定义投影的查询,该投影不包含AutoInc列

是否有人知道使用AutoInc插入表格的新2.0语法并获取生成的密钥?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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")