2014-09-18 31 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