3
有谁知道如何获取最新插入的自动递增列的ID在Slick?我想使用Slick执行条目的插入,然后获取最近插入的主列ID的值,然后将其用于其他插入。获取最近插入的主键浮标
有谁知道如何获取最新插入的自动递增列的ID在Slick?我想使用Slick执行条目的插入,然后获取最近插入的主列ID的值,然后将其用于其他插入。获取最近插入的主键浮标
您可以使用returning
:
val someTable = TableQuery[MyEntity]
val thisId = (someTable returning someTable.map(_.id)) += someRow
注意它返回插入行的ID(可能或不可能是最新的),该行被存储,因此只有在插入到数据库中。
这个问题是,你不应该使用它来进行另一次插入,你有一个自动递增列的原因是你希望DB层为你处理该列并动态地分配一个标识符,想想在你的情况下会发生什么,你插入一行并取回一个id,比如说10,然后你想插入一个id为11的行,但是你不知道你的应用程序的某个其他部分是否正在进行会话,插入一行,如果它成功并且您将尝试插入具有重复ID的行并取回异常。
此外,ids可能不是连续的,这意味着如果某些行被删除,您可能会在列中出现空洞,在这种情况下,自动增量不会填充这些空洞,而是继续增加最后一个id的id值。
如果你想从您可以使用纯SQL的信息模式选择它(恐怕光滑允许此查询的信息模式):
SELECT
Auto_increment
FROM
information_schema.tables
WHERE
table_name='the_table_you_want';
从this后,注意取自评论,在一般不保证返回的ID尚未被使用。
当我说做另一个插入,我的意思是到一个不同的表,使用返回的ID作为该表的外键,而不是插入到同一个表中。 – mp94 2014-09-18 18:22:02
然后它是有道理的,并且“返回”是你正在寻找的东西,这是我使用外部键时常用的模式,我需要捕获该列的id。 – 2014-09-18 18:23:44