有没有人知道如何在Slick中获取最近插入的自动增量列的id?我想使用Slick执行条目插入,然后返回最近使用Scala / Slick插入的主列id的值,然后将其用于另一次插入。
答案 0 :(得分:1)
您可以使用returning
:
val someTable = TableQuery[MyEntity]
val thisId = (someTable returning someTable.map(_.id)) += someRow
请注意,这将返回插入行的id(可能是也可能不是最新的),因此只有在将行存储在数据库中后才会显示。
这个问题是你不应该把它用于另一次插入,你有一个自动增加列的原因是你希望DB层为你处理那个列并动态分配一个标识符,想一想可能发生在你的情况下,你插入一行并获得一个id,比方说10,然后你想插入一个id为11的行,但你不知道你的应用程序的其他部分当前是否在会话和插入一行,如果确实如此,您将尝试插入一个具有重复ID的行并返回异常。
此外,ID可能不是顺序的,这意味着如果某些行被删除,您可能会在列中出现空洞,在这种情况下,自动增量不会填充这些空洞,而只是继续增加最后一个ID的id值。
如果你想从信息模式中选择它,你可以使用普通的SQL(恐怕光滑允许对信息模式进行这种查询):
SELECT
Auto_increment
FROM
information_schema.tables
WHERE
table_name='the_table_you_want';
取自this帖子,请注意评论,一般情况下,不保证返回的ID尚未使用。