2017-03-09 29 views
0
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, ..) 

當我把這種方法與像用戶插入:嘗試使用油滑與新生成的ID從數據庫

User(0, "john", ..) 

我得到的錯誤:

Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "users_pmkey"

似乎試圖插入0作爲PK。在我的DAO我設置列有:

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

我基本上是試圖做兩件事情:

  1. 插入用戶
  2. 回報與PostgreSQL的新生成的ID的用戶。

我在做什麼錯?

回答

2

如果PostgreSQL可以產生你的ID,您可以使用O.AutoInc

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

在你的測試用例類,使用選項爲您id領域:

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

,並創建新的用戶喜歡這個:

User(None, "john", ..) 
相關問題