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

jiyoon jeon님의 프로필 이미지
jiyoon jeon

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

플러시

data jpa 공부하다가

작성

·

149

0

data jpa 공부를 하다가 영속성 컨텍스트가 이해가 되지않아서 다시 보고있습니다.

제가 Service 클래스에서 Repository.save()를 하고 id값을 가지고 왔습니다.

id는 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_id", nullable = false)
    private Long id;

로 되어있구요.

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class MemberService {

    private final MemberRepository memberRepository;

    @Transactional
    public Long create(MemberRequest memberRequest) {
        Member member = memberRequest.toMember();
        Member savedmember = memberRepository.save(member);
        System.out.println("id = " + savedMember.getId()); // null이 출력 
        return savedMember.getId();
    }
...}

MemberService는 위와 같이 작성하였구요. 

save를 하고 꺼낸 Member의 id값을 리턴해주고싶은데

생각해보니까 save를 할땐 db에 쿼리를 보내기 전이라 null이 리턴하는 건가 ? 싶어서 영속성 컨텍스트를 공부해보는 중인데도 감이 안잡혀서요.

 저런 경우 id를 어떻게 리턴해주면 될까요? ...

혹시 소스코드가 부족하시다고 생각되면 말씀해주시면 감사하겠습니다! 더 첨부해서 올리도록 하겠습니다!!! 

답변 1

0

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

안녕하세요. jiyoon jeon님

 

JPA는 영속성 컨텍스트에 저장될 때 id가 있다는 것이 보장됩니다.

(id가 없으면 영속성 컨텍스트에 보관될 수 없습니다.)

그러니까 em.persist()를 호출하고 나면 id가 항상 있어야 합니다.

따라서 해당 코드의 id 값도 정상 조회되어야 합니다.

 

다시 한번 확인해보시고, 만약 그래도 문제가 있으면

 

전체 프로젝트를 압축해서 올려주세요.

1. 인프런 질문 링크를 꼭 포함해주세요.

2. 어떻게 실행할 수 있는지 알려주세요.

감사합니다.

 

jiyoon jeon님의 프로필 이미지
jiyoon jeon

작성한 질문수

질문하기