Slick에서 자동으로 증가 된 열의 가장 최근에 삽입 된 ID를 얻는 방법을 아는 사람 있습니까? Slick을 사용하여 항목 삽입을 수행 한 다음 가장 최근에 Scala/Slick을 사용하여 삽입 한 기본 열 ID의 값을 다시 가져온 다음 다른 삽입에 사용합니다.가장 최근에 삽입 된 기본 키 매끄럽게 가져 오기
3
A
답변
1
당신은 returning
을 사용할 수 있습니다 :이 (또는 가장 최근 수 없습니다 수) 삽입 된 행의 ID를 반환
val someTable = TableQuery[MyEntity]
val thisId = (someTable returning someTable.map(_.id)) += someRow
참고, 행이 데이터베이스에 삽입 저장됩니다 그래서 후에 만.
이 문제는 다른 삽입을 위해 사용해서는 안된다는 것입니다. 자동 증가 열이있는 이유는 DB 레이어에서 해당 열을 사용자가 직접 처리하고 식별자를 동적으로 할당하고 싶다고 생각하기 때문입니다. 귀하의 경우에 일어날 수있는 일은 행을 삽입하고 ID를 되찾고 10을 말한 다음 11 번 ID를 가진 행을 삽입하려고하지만 애플리케이션의 다른 부분이 현재 세션에 있는지, 행을 삽입하면 성공하고 성공하면 중복 ID가있는 행을 삽입하고 예외를 다시 시도합니다.
또한 ID가 순차적이지 않을 수 있습니다. 즉, 일부 행이 삭제 된 경우 열에 구멍이있을 수 있습니다.이 경우 자동 증가는 해당 구멍을 채우지 않지만 마지막 ID의 ID 값을 계속 증가시킵니다 .
당신은 일반 SQL을 사용할 수있는 정보 스키마에서 선택하려는 경우 (I 두려워 매끄러운 나는이 정보 스키마에 대한 쿼리 수) : 코멘트에서 this 후, 노트에서 촬영
SELECT
Auto_increment
FROM
information_schema.tables
WHERE
table_name='the_table_you_want';
을에 그 일반적으로 반환 된 ID가 아직 사용되지 않았 음을 보장하지는 않습니다.
내가 다른 삽입 작업을 수행 할 때, 동일한 테이블에 삽입하지 않고 반환 된 ID를 해당 테이블의 외래 키로 사용하여 다른 테이블에 삽입한다는 의미입니다. – mp94
그러면 이해가되며 '돌아 오는 것'은 찾고있는 것입니다. 외래 키가있을 때 사용하는 공통 패턴이며 해당 열의 ID를 알아야합니다. –