尝试使用Slick插入来自db的新生成的ID

时间:2017-03-09 18:01:30

标签: scala playframework slick

def insert(u: User): Future[User] = {
  val insertQuery = users returning users.map(_.id) into ((user, id) => user.copy(id = id))
  val action = insertQuery += u
  db.run(action)
}

case class User(id: Int, name: String, ..)

当我用这样的用户调用此方法时:

User(0, "john", ..)

我收到错误:

  

引起:org.postgresql.util.PSQLException:错误:重复键   值违反了唯一约束" users_pmkey"

似乎是试图将0作为PK插入。在我的DAO中,我将列设置为:

def id = column[Int]("id", O.PrimaryKey)

我基本上是想做两件事:

  1. 插入用户
  2. 使用postgresql新生成的ID返回User。
  3. 我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果你的ID是由postgresql生成的,你可以使用O.AutoInc

def id = column[Int]("id", O.PrimaryKey, O.AutoInc)

在您的案例类中,为id字段使用选项:

case class User(id: Option[Int], name: String, ..)

并像这样创建新用户:

User(None, "john", ..)