Slick:检索插入值的 id

Posted

技术标签:

【中文标题】Slick:检索插入值的 id【英文标题】:Slick: retrieve id of inserted value 【发布时间】:2021-11-21 02:09:38 【问题描述】:

按照这部分文档https://scala-slick.org/doc/3.0.0/queries.html#inserting,我正在尝试实现如上所示的插入操作:

var point = TableQuery[Geopointtable]
val writeQuery = point returning point.map(_.id)
val geoId = writeQuery += GeopointtableRow(0, 50, 40)

val idFromDb = db.run(geoId)

我期待,最后一行代码返回表中新行的 id。相反,它返回:“Future()”。顺便说一句,在数据库中的行创建成功。

是否有任何错误,或者我不清楚这部分文档。是否有其他方法可以检索 id?

【问题讨论】:

【参考方案1】:

“入门”部分对此进行了说明:

Slick 的 API 是完全异步的,并在单独的线程池中运行数据库调用。

这意味着db.run 返回一个Future,该Future 在操作完成时完成(如果操作失败则失败)。所以需要在Future里面处理结果:

db.run(geoId).map idFromDb =>
  // Process the id here

数据库操作完成后将进行处理。主线程不会阻塞。

【讨论】:

以上是关于Slick:检索插入值的 id的主要内容,如果未能解决你的问题,请参考以下文章

检索最后插入的 Id。拉拉维尔

php检索插入的最后一条记录的ID并将其插入另一个表中

Laravel - 多插入行和检索 id

插入 Oracle 并检索生成的序列 ID

CodeIgniter activerecord,检索最后一个插入ID?

检索插入记录的 ID:Php & MS SQL SERVER