강의

멘토링

로드맵

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

나 좀 도와줘요님의 프로필 이미지
나 좀 도와줘요

작성한 질문수

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

상품 등록

ItemController의 create() 메서드에서 id값을 안받는 이유는 무엇인가요??

작성

·

285

0

GenerateValue가 id 값을 자동으로 생성해주기 때문에 안받아도 상관이 없는 거라고 생각했는데 아이디값을 setter로 받아서 코드를 작성해도 등록과 조회가 잘됩니다 ㅠㅠ

Form 객체에 id필드를 추가하고 id를  받아서 구현해도 상관없을까요? 아니면 id값은 생략하는 게 맞는건가요?

===============================================
<추가>

id를 찍어보니까 null이 찍히는 걸 확인했습니다.

JPA가 persist()를 할 때 id를 생성하고 그 id를 사용해서 영속성 컨텍스트에 데이터를 저장하기 때문에 그 전에는 id존재하지 않기 때문에 굳이 받을 필요가 없는게  맞는지 궁금합니다..!

<ItemController.java>

Book book = new Book();
book.setName(form.getName());
book.setPrice(form.getPrice());
book.setStockQuantity(form.getStockQuantity());
book.setAuthor(form.getAuthor());
book.setIsbn(form.getIsbn());

<MemberController.java>

Member member = new Member();
member.setName(form.getName());
member.setAddress(address);

퀴즈

회원 가입 시 화면 입력 데이터를 엔티티 객체 대신 별도의 Form 객체로 받는 주된 이유는 무엇일까요?

데이터베이스 성능을 최적화하기 위해서

화면 종속적인 데이터나 유효성 검증 로직을 분리하기 위해서

JPA 영속성 컨텍스트와 직접적인 관계를 맺기 위해서

코드의 자동 생성 기능을 활용하기 위해서

답변 1

0

안녕하세요. 에러나면짖는개님, 공식 서포터즈 David입니다.

.
네, 이해하신게 맞습니다.

학습하신대로 persist 이후 id가 생성되어 엔티티가 id를 가지게 됩니다.

따라서 아이템을 저장하기 전 아이템을 생성하는 과정에서 id를 전달할 필요가 없는 것입니다.
.
감사합니다.

나 좀 도와줘요님의 프로필 이미지
나 좀 도와줘요

작성한 질문수

질문하기