Slick:检索插入值的 id
Slick: retrieve id of inserted value
根据这部分文档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)
我预计,最后一行代码 return table 中新行的 ID。取而代之的是 return: "Future()"。顺便说一句,在数据库行创建成功。
这部分文档有没有看错,或者我没看明白。可能有另一种检索 ID 的方法吗?
“入门”部分对此进行了解释:
Slick’s API is fully asynchronous and runs database call in a separate thread pool.
这意味着 db.run
returns 一个 Future
在操作完成时完成(或者如果操作失败则失败)。所以你需要在 Future
:
中处理结果
db.run(geoId).map{ idFromDb =>
// Process the id here
}
数据库操作完成后将进行处理。主线程不会阻塞。
根据这部分文档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)
我预计,最后一行代码 return table 中新行的 ID。取而代之的是 return: "Future()"。顺便说一句,在数据库行创建成功。
这部分文档有没有看错,或者我没看明白。可能有另一种检索 ID 的方法吗?
“入门”部分对此进行了解释:
Slick’s API is fully asynchronous and runs database call in a separate thread pool.
这意味着 db.run
returns 一个 Future
在操作完成时完成(或者如果操作失败则失败)。所以你需要在 Future
:
db.run(geoId).map{ idFromDb =>
// Process the id here
}
数据库操作完成后将进行处理。主线程不会阻塞。