Slick / Plainsql을 사용하여 자동 증분 ID를 검색하는 방법은 무엇입니까?
-
21-12-2019 - |
문제
현재 삽입물의 자동 증분 ID를 검색하는 매끄러운 / PLANSQL 네이티브 솔루션이 없습니까?
사용자 ID는 MySQL 테이블의 자동 증분 필드입니다.
sql"""
INSERT INTO `table`(`email`)
OUTPUT INSERTED.userId
VALUES ("theEmailAdress@test.de")
""".as[Int].firstOption
.
도움이 크게 감사 할 것입니다.
환호 올리버
해결책 2
고맙습니다. Cvogt 이 토론에서 돕기 위해 slick의 plainsql 쿼리 .
마침내 누락 된 기본 기능을 다음과 같이 대체 할 작업을 발견했습니다.
동일한 세션 내에서 나는 두 개의 쿼리를 해결합니다. 첫 번째 것은 INSERT
문이며, 두 번째 명령문은 최근 실행 된 SELECT LAST_INSERT_ID()
(1)에 의해 AUTO_INCREMENT
열에 대해 설정된 최신 자동 생성 값을 반환하는 INSERT
입니다. 자세한 내용 : mysql 참조 - last_insert_id ()
Database.forDataSource(dataSource).withDynSession {
sqlu"""INSERT INTO `users`(`email`) VALUES ("theEmailAdress@test.de")
""".firstOption match {
case Some(num) if num == 1 => sql"SELECT LAST_INSERT_ID()".as[Long].firstOption()
case None => None
}
}
.
이것은 지금 저를 위해 일합니다. 개선 사항이 있으면 솔루션을 게시하는 것을 망설이지 마십시오.
다른 팁
는 데이터베이스에 따라 다릅니다.
MS SQL의 SCOPE_IDENTITY (), MySQL은 last_insert_id ()입니다. 위의 것도 아닌 경우 DB에 해당하는 것을 시도해보십시오.
cvogt 에 의해 추가 :
현재 PLANE SQL에 대한 슬릭 내장 기능이 없으며 Slick의 sql"..."
보간 또는 StaticQuery
를 사용할 때 기본 JDBC 문에 액세스 할 수있는 방법이 없습니다. 이는 getGeneratedKeys
에 액세스 할 수 있습니다. 아마도 SQL Interpolator 및 Statementinvoker 이를 허용합니다. 그들은 단지 150 LOC입니다. 어쩌면 샷을주고 홍보를 제출할 가치가있을 것입니다.
withPreparedInsertStatement와 메소드와 세션 < a> 메소드 > JDBC 연결 메소드는 JDBC 문을 사용하여 작동합니다. "nofollow"> https://github.com/slick/slick/pull을 다음에 대한 문서를 추가하기 위해 PR을 만들었습니다. / 691