关于 Slick 3.0.0,为什么插入现有 PK 不抛出任何错误?

About Slick 3.0.0, Why insert with exist PK don't throw any error?

您好,我对 Slick 3 很困惑,我创建了简单的插入。 如果我插入了新的 PK,它运行良好,但是当我尝试插入一个现有的 PK 时,Slick 不会抛出任何错误并且 future.isCompleted 仍然是 return true。 那么我的代码有什么问题呢?

val db = Database.forConfig("db")
val future = {
  try {
    val insert = DBIO.seq(
      subscribers += subscriber
    )
    db.run(insert.transactionally)
  } finally db.close
}
return if (future.isCompleted) return Some(subscriber) else None

已解决:我只需要等待结果。

val db = Database.forConfig("db")
val isCompleted = {
  val f = db.run((subscribers += subscriber).transactionally)
  try {
    Await.result(f, Duration.Inf)
    true
  } catch {
    case _ => false
  } finally db.close
}
return if (isCompleted) return Some(subscriber) else None

问题似乎是您的代码没有等到将来 db.run(insert.transactionally) 完成。您创建未来,然后立即关闭数据库。