【问题标题】:How to get autoincrement ID just inserted by ScalaQuery如何获取ScalaQuery刚刚插入的自动增量ID
【发布时间】:2012-04-24 11:49:37
【问题描述】:

我正在使用 ScalaQuery 访问 PostgreSql。 Data 是一个表,它有一个名为 id 的自动增量主键,定义为 def id = column[Long] ("id", O NotNull, O PrimaryKey, O AutoInc, O DBType "serial")。我使用Data.insert(name, filename) 创建一个新的Data 记录。有没有办法获得刚刚创建的记录的idinsert 方法只返回一个由 executeUpdate 返回的 Int 值。

【问题讨论】:

    标签: scala primary-key scalaquery


    【解决方案1】:

    ScalaQuery 不支持开箱即用的序列 ID,需要先定义一个辅助方法:

    val seqID = SimpleFunction.nullary[Int]("LASTVAL")
    

    然后,在范围内使用上述助手,执行插入:

    db withSession {
      val q  = Foo.insert(someInstance)
      val id = Query(seqID) // call sequence helper
    }
    

    关于线程安全的评论请参考:
    https://stackoverflow.com/a/2944481/185840

    和:
    https://github.com/szeiger/scala-query/issues/10#issuecomment-698418

    【讨论】:

    • 谢谢。乍一看,这个解决方案似乎是线程不安全的。这是个问题吗?
    • 它是线程安全的,查询发生在会话上下文中,LASTVAL 保证当前会话的最后插入 ID
    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2017-07-04
    • 2011-01-18
    • 2014-08-23
    相关资源
    最近更新 更多