인프런 커뮤니티 질문&답변

쌤수님의 프로필 이미지
쌤수

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 서비스 개발

em.persist() 메서드 호출시 id값 얻어오기

작성

·

183

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.


회원 서비스 개발 4분쯤에 영한님께서 em.persist() 메서드로 영속성 컨텍스트에 인스턴스가 들어가게되면, DB에 들어가기 전에 id(key)에 대한 값이 들어가지게 된다고 하셨는데,

제가 이전에 들었던 부분은 insert쿼리가 나갔다가 저장된 엔티티를 통해서 id값을 받아오는 걸로 알고 있습니다.

그래서 JPA 기본편 4챕터를 찾아보니, JDBC3에서 추가된 `Statement.getGeneratedKeys()` 이 메서드를 사용하면, 데이터를 저장하면서 동시에 생성된 기본 키 값도 얻어올 수 있다는 것을 제가 정리해놨었는데,

 

getGeneratedKeys() 메서드가 ResultSet을 반환하던데,

구글링 해보니 ResultSet은 DB에서 조회한 정보가 담겨있는 것이더라구요.

 

그래서 연결지어서 생각해보니

getGeneratedKeys() 메서드를 호출해서 DB에서 마지막 결과의 id를 조회해서 할당하는 이런 방식으로 동작 하는 건가..

생각하기도 했지만, 잘 모르겠습니다....ㅎㅎ

답변 부탁드리겠습니다!

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 쌤수님

생각하신 내용이 맞습니다 🙂

감사합니다.

쌤수님의 프로필 이미지
쌤수
질문자

getGeneratedKeys() 메서드를 호출해서 DB에서 마지막 결과의 id를 조회해서 할당하는 방식이란 것이죠?

감사합니다!

김영한님의 프로필 이미지
김영한
지식공유자

getGeneratedKeys를 사용하는 것은 맞지만 데이터베이스 테이블에 있는 마지막 결과를 select로 조회하는 것은 아닙니다. 키 조회 전략에 따라 다르지만, 데이터베이스 테이블에 INSERT 하면 해당 테이블에 INSERT하는 시점의 KEY를 DB에서 반환해줍니다. 이 값을 사용하게 됩니다.

감사합니다.

쌤수님의 프로필 이미지
쌤수
질문자

아~~ 넵 명쾌한 답변 감사합니다.ㅎㅎ

insert문에 들어가는 value가 p6psy 로그로도 나오네요..

감사합니다!

쌤수님의 프로필 이미지
쌤수

작성한 질문수

질문하기