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

hello_hola님의 프로필 이미지
hello_hola

작성한 질문수

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

연관관계가 있는 엔티티 save 시 영속성 관련 질문입니다.

작성

·

72

0

save를 통해 A라는 엔티티를 하나 저장하려고 합니다.

그 엔티티는 ManyToOne으로 B라는 엔티티와 연관관계를 맺고 있습니다.

A를 save할 때, B는 영속성 컨텍스트에 있어야 하는 상태인가요?

답변 1

0

안녕하세요. hello_hola님, 공식 서포터즈 y2gcoder입니다.

생각하신 게 맞습니다 🙂

감사합니다.

hello_hola님의 프로필 이미지
hello_hola
질문자

save 시에 기존 B가 영속성 컨텍스트에 있지 않더라도 A입장에서 FK로 id값이 들어가는 것이니까 상관 없지 않나요??

이미 pk가 존재하는(영속화되었던 적이 있던) 준영속 상태라면, 저장이 가능합니다!🙂

다음 링크(클릭)에서도 같은 내용으로 질문해주고 계십니다!

저는 저장된 적이 없고 pk가 존재하지 않는 상태의 B엔티티라고 이해했습니다!

더불어 외래키가 설정되어있다면 FK로 설정한 B의 pk가 DB에 존재하지 않는다면 DB 단에서 에러를 뱉어줄 것입니다 🙂

hello_hola님의 프로필 이미지
hello_hola
질문자

감사합니다!
마지막으로 준영속 상태가 아닌 jwt 토큰같은 곳에 저장된 member 객체더라도(clear 등으로 준영속이 된 것이 아닌 이미 db에 저장은 된 상태) 영속성 컨텍스트에 존재하지 않아도 괜찮은 것인가요?

트랜잭션에서 벗어났던 엔티티라면 그럴 것 같기는 합니다.

개인적으로는 JWT 토큰 같은 곳에는 식별할 수 있는 정보(식별자)만 넣어놓고,

트랜잭션 내에서 엔티티를 조회해오는 게 맞다고 생각합니다 🙂

그리고 JWT 에 저장해놓은 엔티티를 그대로 사용했을 때는 해당 준영속 상태의 엔티티가 DB와 일치하지 않을 때의 케이스도 생각해봐야 합니다. 예를 들어 DB에서 삭제된 엔티티지만 JWT 에는 그대로 있을 때의 케이스가 제일 먼저 떠오르는 것 같습니다.

식별자를 이용해서 영속 상태의 엔티티를 다시 조회할 경우에는 위와 같은 상황을 고려할 필요가 없습니다 🙂

 

hello_hola님의 프로필 이미지
hello_hola

작성한 질문수

질문하기