2014-09-18 29 views
3

有谁知道如何获取最新插入的自动递增列的ID在Slick?我想使用Slick执行条目的插入,然后获取最近插入的主列ID的值,然后将其用于其他插入。获取最近插入的主键浮标

回答

1

您可以使用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尚未被使用。

+0

当我说做另一个插入,我的意思是到一个不同的表,使用返回的ID作为该表的外键,而不是插入到同一个表中。 – mp94 2014-09-18 18:22:02

+0

然后它是有道理的,并且“返回”是你正在寻找的东西,这是我使用外部键时常用的模式,我需要捕获该列的id。 – 2014-09-18 18:23:44